09       .OPT NO LIST›10 ; SAVE #D1:PHENTRY.M65›20 ;›30 ;›40 ; LOAD #D1:SCREEN1.M65›50 ;›60 ; *= $EEBC 07 Oct 94›62       .PAGE "Peripheral Handler Entry"›70        LIST  ›72       .LOCAL ›80 ; Peripheral handler entry:›81 ;  install device in hatabs if›82 ; not already there and if room›83 ; Entry: ascii name in x›84 ;  table addr in y,a (lsb,msb)›85 ; Returns:›86 ;  already installed: a=a y=y›87 ;   x points name+1 in Hatabs›88 ;   c=1 s=0›89 ;›90 ;  newly installed:  a=a›91 ;   x points name y=ascii name›92 ;   c=0 s=?›93 ;›94 ;  no room: a=a y=$ff x=34›95 ;   c=1 s=1›96 ;›061116 PHE PHA       Pointed to by Pentv›061117   TYA         Table address›061118   PHA         to stack›061119   TXA         Device name to a›061120   LDX #0›061122 ?FINDDEV CMP HATABS,X›061125   BEQ ?FOUND›061127   INX ›061128   INX ›061129   INX ›061130   CPX #34›061132   BMI ?FINDDEV›061134   LDX #0      Not found,›061136   TAY         save device and›061137   LDA #0      find empty slot›061139 ?FINDMT CMP HATABS,X›061142   BEQ ?INSTALL Got one›061144   INX ›061145   INX ›061146   INX ›061147   CPX #34›061149   BMI ?FINDMT›061151   PLA         Clear stack›061152   PLA ›061153   LDY #255    Flag no free›061155   SEC         return -ve and c=1›061156   RTS ›061157 ?FOUND PLA    Restore address›061158   TAY         to y,a›061159   PLA ›061160   INX         x points address›061161   SEC         return +ve and c=1›061162   RTS ›061163 ?INSTALL TYA ›061164   STA HATABS,X Device name›061167   PLA ›061168   STA HATABS+1,X Addr lsb›061171   PLA ›061172   STA HATABS+2,X Addr msb›061175   CLC         return +/- and c=0›061176   RTS         ; ----------------›061177 PDOPENPOLL LDY #0 Poll at open›061179   LDA (ICBALZ),Y to Daux1›061181   LDY ICDNOZ  dev# to Daux2›061183   JSR POLL.PD Poll it›061186   BPL ?POLLEDOK go if good›061188   LDY #130    Else, no device›061190   RTS ›061191 ?POLLEDOK LDA #$7F›061193   STA ICHIDZ›061195   LDA # <?PUT-1 Put byte›061197   STA ICPTLZ  address-1›061199   LDA # >?PUT-1›061201   STA ICPTHZ›061203   LDA DVSTAT+2 Device Sio addr›061206    ALDX  ICAX5Z Recover channel›061209   STA ICAX4,X›061212   LDY #0›061214   LDA (ICBALZ),Y›061216   STA ICAX3,X›061219   LDY #1›061221   RTS ›061222 ?PUT PHA      Put byte routine›061223   TXA         for provisionally›061224   PHA         open iocb.›061225   AND #$0F    Verify iocb#›061227   BNE ?BADCH›061229   CPX #$80›061231   BPL ?BADCH›061233   LDA HNDLOD  Was handler loaded?›061236   BNE ?HNDLOD Yes›061238   LDY #130    Else, no device›061240 ?EREXIT PLA ›061241   PLA ›061242   CPY #0›061244   RTS ›061245 ?BADCH LDY #134 invalid iocb#›061247   BMI ?EREXIT Always›061249 ?HNDLOD  ASTX  ICAX5Z›061252   LDY #0›061254 ?COPY LDA ICHID,X Copy iocb›061257   STA ICHIDZ,Y to ziocb›061260   INX ›061261   INY ›061262   CPY #12›061264   BMI ?COPY›061266   JSR INITPD  Initialize device›061269   BMI ?EREXIT›061271   PLA         recover x›061272   TAX ›061273   PLA         recover a›061274   TAY         save a›061275   LDA ICPTHZ  Do indirect jsr›061277   PHA         to put byte›061278   LDA ICPTLZ›061280   PHA ›061281   TYA         recover byte›061282   LDY #146    invalid xio code›061284   RTS ›061285   .BYTE 0,0,0,0 Unused›061289   .BYTE 0,0›061291   JMP MOTORON Not referenced›