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›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›