10 ; SAVE #D1:PARALLEL.M65›40 ; LOAD #D1:SELFTEST.M65›0130 ; *= $C745 14 Mar 96›0141 .PAGE "Parallel Device Handler"›0144 LIST ›0146 .LOCAL ›0150 ?JKP .= *›0160 *= $D100 Parallel device›0161 ?PDGETPUT›0165 *= $D101 equates›0166 ?PDRESET›0170 *= $D1FF›0171 ?PDSELECT›0190 *= $D800›0200 *= *+2 Rom checksum›0210 *= *+1 revision number›0220 ?PDID1 *= *+1 Device id num ($80)›0230 *= *+1 Device type›0240 ?PDIOV *= *+3 i/o vector›0250 ?PDINTV *= *+3 int vector›0260 ?PDID2 *= *+1 id number ($91)›0270 *= *+1 name (ascii)›0280 ?PDDEVTB *= *+2 open vector-1›0290 *= *+2 close vector-1›0300 *= *+2 get byte-1›0310 *= *+2 put byte-1›0320 *= *+2 status-1›0330 *= *+2 special-1›0340 ?INITPD *= *+3 Jmp init›0350 *= ?JKP›0355 ;›0360 ; Relocate routine to new address›0370 ;›051013 PDRELOC LDX #5 Clear 6 bytes›051015 ?RLOOP LDA #0 from $2C9-$2CE›051017 STA RUNADR,X Labels Runadr›051020 DEX cleared Hiused›051021 BPL ?RLOOP are Zhiuse›051023 ?51023 LDA #0›051025 STA LCOUNT Temporary counter›051028 JSR ?GETBYT›051031 LDY #156 Error code›051033 BCS ?RELXIT›051035 STA HIBYTE csum lsb›051038 JSR ?GETBYT›051041 LDY #156›051043 BCS ?RELXIT›051045 STA RECLEN csum msb›051048 LDA HIBYTE›051051 CMP #$0B›051053 BEQ ?51093›051055 ROL A›051056 TAX ›051057 LDA ?ADDRS,X›051060 STA RUNADR›051063 LDA ?ADDRS+1,X›051066 STA RUNADR+1›051069 ?51069 LDA RECLEN›051072 CMP LCOUNT›051075 BEQ ?51023›051077 JSR ?GETBYT›051080 LDY #156›051082 BCS ?RELXIT›051084 JSR ?RUN›051087 INC LCOUNT›051090 BNE ?51069›051092 ?RELXIT RTS Return c=0 if ok›051093 ?51093 JSR ?GETBYT Handle›051096 LDY #156 end record›051098 BCS ?EXIT›051100 STA RUNADR›051103 JSR ?GETBYT›051106 LDY #156›051108 BCS ?EXIT›051110 STA RUNADR+1›051113 LDA RECLEN›051116 CMP #1›051118 BEQ ?51142›051120 BCC ?51145›051122 CLC ›051123 LDA RUNADR›051126 ADC LOADAD›051129 TAY ›051130 LDA RUNADR+1›051133 ADC LOADAD+1›051136 ?51136 STY RUNADR›051139 STA RUNADR+1›051142 ?51142 LDY #1›051144 ?EXIT RTS ›051145 ?51145 LDY #0›051147 LDA #0›051149 BEQ ?51136 Always›051151 ?GETBYT JMP (GBYTEA) Get byte›051154 ?RUN JMP (RUNADR) Exec run›051157 ?51157 LDY LCOUNT Handle text›051160 CPY #1 record›051162 BEQ ?51174›051164 BCS ?51281›051166 STA RELADR›051169 STA NEWADR›051172 BCC ?51280 Go always›051174 ?51174 STA RELADR+1›051177 STA NEWADR+1›051180 LDX #0›051182 LDA HIBYTE›051185 BEQ ?51193›051187 CMP #$0A›051189 BEQ ?51212›051191 LDX #2›051193 ?51193 CLC ›051194 LDA RELADR›051197 ADC LOADAD,X›051200 STA NEWADR›051203 LDA RELADR+1›051206 ADC LOADAD+1,X›051209 STA NEWADR+1›051212 ?51212 CLC ›051213 LDA NEWADR›051216 ADC RECLEN›051219 PHA ›051220 LDA #0›051222 ADC NEWADR+1›051225 TAY ›051226 PLA ›051227 SEC ›051228 SBC #2›051230 BCS ?OVRDEY›051232 DEY ›051233 ?OVRDEY PHA ›051234 TYA ›051235 CMP HIUSED+1,X›051238 PLA ›051239 BCC ?51257›051241 BNE ?51248›051243 CMP HIUSED,X›051246 BCC ?51257›051248 ?51248 STA HIUSED,X›051251 PHA ›051252 TYA ›051253 STA HIUSED+1,X›051256 PLA ›051257 ?51257 LDX HIBYTE›051260 CPX #1›051262 BEQ ?51280›051264 CPY MEMTOP+1›051267 BCC ?51280›051269 BNE ?51276›051271 CMP MEMTOP›051274 BCC ?51280›051276 ?51276 PLA ›051277 PLA ›051278 LDY #157›051280 ?51280 RTS ›051281 ?51281 SEC Relocate text›051282 PHA into memory›051283 LDA LCOUNT›051286 SBC #2›051288 CLC ›051289 ADC NEWADR›051292 STA LTEMP›051294 LDA #0›051296 ADC NEWADR+1›051299 STA LTEMP+1›051301 PLA ›051302 LDY #0›051304 STA (LTEMP),Y›051306 JMP ?51280 Just to a rts›051309 ?51309 CLC Handle word›051310 ADC NEWADR reference record›051313 STA LTEMP type›051315 LDA #0›051317 ADC NEWADR+1›051320 STA LTEMP+1›051322 LDY #0›051324 LDA (LTEMP),Y›051326 CLC ›051327 ADC LOADAD›051330 STA (LTEMP),Y›051332 INC LTEMP›051334 BNE ?51338›051336 INC LTEMP+1›051338 ?51338 LDA (LTEMP),Y›051340 ADC LOADAD+1›051343 STA (LTEMP),Y›051345 RTS ›051346 ?51346 LDX #0 Handle low-byte›051348 LDY HIBYTE and one-byte›051351 CPY #4 record type›051353 BCC ?51357›051355 LDX #2›051357 ?51357 CLC ›051358 ADC NEWADR›051361 STA LTEMP›051363 LDA #0›051365 ADC NEWADR+1›051368 STA LTEMP+1›051370 LDY #0›051372 LDA (LTEMP),Y›051374 CLC ›051375 ADC LOADAD,X›051378 STA (LTEMP),Y›051380 RTS ›051381 ?51381 PHA ›051382 LDA LCOUNT›051385 ROR A›051386 PLA ›051387 BCS ?51410›051389 CLC ›051390 ADC NEWADR›051393 STA LTEMP›051395 LDA #0›051397 ADC NEWADR+1›051400 STA LTEMP+1›051402 LDY #0›051404 LDA (LTEMP),Y›051406 STA HIBYTE›051409 ?51409 RTS ›051410 ?51410 CLC ›051411 ADC LOADAD›051414 LDA #0›051416 ADC LOADAD+1›051419 ADC HIBYTE›051422 LDY #0›051424 STA (LTEMP),Y›051426 BEQ ?51409›051428 ?ADDRS .WORD ?51157›051430 .WORD ?51157›051432 .WORD ?51346›051434 .WORD ?51346›051436 .WORD ?51346›051438 .WORD ?51346›051440 .WORD ?51309›051442 .WORD ?51309›051444 .WORD ?51381›051446 .WORD ?51381›051448 .WORD ?51157›051450 .WORD ?51093›051452 JSLFTST LDA #$FF Select and›051454 STA COLDST exec selftest›051457 LDA PORTB›051460 AND #$7F›051462 STA PORTB›051465 JMP SLFTSV Following on Reset›051468 GPDINI LDA #1 Init generic›051470 STA SHPDVS parallel device›051473 ?51473 LDA SHPDVS handler.›051476 STA ?PDSELECT Select device›051479 LDA ?PDID1 Check id bytes›051482 CMP #$80 skip if wrong›051484 BNE ?51496›051486 LDA ?PDID2›051489 CMP #$91›051491 BNE ?51496›051493 JSR ?INITPD Initialize it›051496 ?51496 ASL SHPDVS Next device›051499 BNE ?51473 Do all 8 possible›051501 LDA #0›051503 STA ?PDSELECT Deselect pd›051506 RTS ›051507 SIOUTL LDA #1 Siov points here›051509 ASTA CRITIC and tries pd›051512 LDA DUNIT before serial›051515 PHA ›051516 LDA PDVMSK See if any PD›051519 BEQ ?NOTPD No›051521 LDX #8›051523 ?TRYPD JSR ?SELECT Got device?›051526 BEQ ?NOTPD No go to serial io›051528 TXA Save device›051529 PHA ›051530 JSR ?PDIOV Try the io›051533 PLA Recover device›051534 TAX ›051535 BCC ?TRYPD Error, retry›051537 LDA #0›051539 STA SHPDVS›051542 STA ?PDSELECT›051545 BEQ ?SIOEND Always›051547 ?NOTPD JSR SIOMAIN No pd›051550 ?SIOEND PLA Exit all sio›051551 STA DUNIT›051554 LDA #0›051556 ASTA CRITIC›051559 STY DSTATS›051562 LDY DSTATS›051565 RTS ›051566 PDEVID LDX #8 Device id›051568 ?51568 ROR A routine›051569 BCS ?51574 set into vpirq›051571 DEX on reset/boot›051572 BNE ?51568›051574 ?51574 LDA SHPDVS›051577 PHA ›051578 LDA ?51745-1,X›051581 STA SHPDVS›051584 STA ?PDSELECT›051587 JSR ?PDINTV›051590 PLA ›051591 STA SHPDVS›051594 STA ?PDSELECT›051597 PLA ›051598 TAX ›051599 PLA ›051600 RTI ›051601 OPEN.PD LDY #1 Parallel device›051603 JMP ?51676 vectors›051606 CLOSE.PD LDY #3›051608 JMP ?51676›051611 GET.PD LDY #5›051613 JMP ?51676›051616 PUT.PD LDY #7›051618 JMP ?51676›051621 STATUS.PD LDY #9›051623 JMP ?51676›051626 SPECL.PD LDY #11›051628 JMP ?51676›051631 ?SELECT DEX Select next›051632 BPL ?51643 parallel device›051634 LDA #0›051636 STA SHPDVS›051639 STA ?PDSELECT›051642 RTS ›051643 ?51643 LDA PDVMSK›051646 AND ?51745,X›051649 BEQ ?SELECT›051651 STA SHPDVS›051654 STA ?PDSELECT›051657 RTS ›051658 ?51658 LDA ?PDDEVTB,Y Invoke›051661 PHA parallel device›051662 DEY handler›051663 LDA ?PDDEVTB,Y›051666 PHA ›051667 LDA PPTMPA›051670 LDX PPTMPX›051673 LDY #146›051675 RTS ›051676 ?51676 STA PPTMPA›051679 STX PPTMPX›051682 ALDA CRITIC›051685 PHA ›051686 LDA #1›051688 ASTA CRITIC›051691 LDX #8›051693 ?51693 JSR ?SELECT›051696 BEQ ?51715›051698 TXA ›051699 PHA ›051700 TYA ›051701 PHA ›051702 JSR ?51658›051705 BCC ?51739›051707 STA PPTMPA›051710 PLA ›051711 PLA ›051712 JMP ?51717›051715 ?51715 LDY #130›051717 ?51717 LDA #0›051719 STA SHPDVS›051722 STA ?PDSELECT›051725 PLA ›051726 ASTA CRITIC›051729 LDA PPTMPA›051732 STY PPTMPX›051735 LDY PPTMPX›051738 RTS ›051739 ?51739 PLA ›051740 TAY ›051741 PLA ›051742 TAX ›051743 BCC ?51693›051745 ?51745 .BYTE $80,$40,$20,$10›051749 .BYTE $08,$04,$02,$01›051753 INITPD ALDX ICAX5Z Load and›051756 LDA ICAX4,X init peripheral›051759 JSR PHDLOD handler›051762 BCS ?51796›051764 CLC ›051765 JSR L59550›051768 BCS ?51796›051770 ALDX ICAX5Z›051773 LDA ICAX3,X›051776 JSR ERR130B›051779 BCS ?51796›051781 ALDX ICAX5Z›051784 STA ICHID,X›051787 STA ICHIDZ›051789 LDA #3›051791 STA ICCOMT›051793 JMP IOC7›051796 ?51796 JMP ERR130›