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
