09 .OPT NO LIST›10 ; SAVE #D1:PERHNDLR.M65›20 ;›30 ;›40 ; LOAD #D1:SIO.M65›50 ;›60 ; *= $E739›70 .PAGE "Peripheral Handler"›80 LIST ›90 .LOCAL ›059193 PHR LDA WARMST Per.Hndlr init›059195 BEQ ?POWRUP Go if powerup›059197 LDA # CHLINK-18›059203 STA ZCHAIN+1›059205 ?59205 LDY #18 Point Chlink›059207 CLC Check if more›059208 LDA (ZCHAIN),Y handler to›059210 TAX load›059211 INY ›059212 ADC (ZCHAIN),Y›059214 BEQ ?EXIT1 None›059216 LDA (ZCHAIN),Y Add 18 bytes›059218 STA ZCHAIN+1 from Chlink›059220 STX ZCHAIN Return complement›059222 JSR ADD18 of sum, c=0 y=$ff›059225 BNE ?EXIT1›059227 JSR ?59540 a=0 y=$ff x=lsb›059230 BCS ?EXIT1›059232 BCC ?59205›059234 ?POWRUP LDA #0›059236 STA CHLINK›059239 STA CHLINK+1›059242 LDA #$4F Are you there?›059244 BNE ?59291 Always to set dcb›059246 ?59246 LDA #0 Daux1/2 to get›059248 TAY handler info›059249 JSR POLL.PD Daux1/2=0›059252 BPL ?59255 Flag from sio›059254 ?EXIT1 RTS No pd›059255 ?59255 CLC Got a pd›059256 LDA MEMLO›059259 ADC DVSTAT lsb handler size›059262 STA TEMP1›059265 LDA MEMLO+1›059268 ADC DVSTAT+1 msb›059271 STA TEMP2›059274 SEC ›059275 LDA MEMTOP Check if under›059278 SBC TEMP1 memtop›059281 LDA MEMTOP+1›059284 SBC TEMP2›059287 BCS ?59298 Yes, ok›059289 ?59289 LDA #$4E Else null poll›059291 ?59291 TAY ›059292 JSR POLL.PD›059295 JMP ?59246›059298 ?59298 LDA DVSTAT+2 sio address›059301 LDX MEMLO›059304 STX DVSTAT+2›059307 LDX MEMLO+1›059310 STX DVSTAT+3›059313 JSR PHDLOD›059316 BMI ?59289›059318 SEC ›059319 JSR L59550›059322 BCS ?59289›059324 BCC ?59246›059326 POLL.PD PHA Exec poll›059327 LDX #9›059329 ?POLL.2 LDA ?DCBDAT.1,X›059332 STA DDEVIC,X Get 4 bytes›059335 DEX into dvstat›059336 BPL ?POLL.2›059338 STY DAUX2 Set daux from›059341 PLA a and y entry›059342 STA DAUX1 values›059345 JMP SIOV›059348 ?DCBDAT.1 .BYTE $4F ddevic›059349 .BYTE 1 dunit›059350 .BYTE $40 dcomnd›059351 .BYTE $40 dstats›059352 .WORD DVSTAT dbuflo/hi›059354 .WORD 30 dtimlo/hi›059356 .WORD 4 dbytlo/hi›059358 PHDLOD STA TEMP2 Load handler›059361 LDX #0 Temp2=sio addr›059363 STX TEMP1›059366 DEX ›059367 STX TEMP3 Temp3=$FF›059370 LDA DVSTAT+2 memlo›059373 ROR A›059374 BCC ?59384 must be even›059376 INC DVSTAT+2›059379 BNE ?59384›059381 INC DVSTAT+3 memlo+1›059384 ?59384 LDA DVSTAT+2 memlo›059387 STA LOADAD›059390 LDA DVSTAT+3 memlo+1›059393 STA LOADAD+1›059396 LDA # ?GET1 subroutine›059403 STA GBYTEA+1›059406 LDA #$80›059408 STA ZLOADA›059411 JMP PDRELOC›059414 ?GET1 LDX TEMP3 Get byte›059417 INX routine›059418 STX TEMP3›059421 BEQ ?59431›059423 ?59423 LDX TEMP3 Error exit?›059426 LDA ICAX4+$30,X›059429 CLC ›059430 RTS ›059431 ?59431 LDA #$80›059433 STA TEMP3›059436 JSR ?GETBLOCK›059439 BPL ?59423›059441 SEC ›059442 RTS ›059443 ?GETBLOCK LDX #11 Get next›059445 ?BLOCK.2 LDA ?DCBDAT.2,X load›059448 STA DDEVIC,X block›059451 DEX ›059452 BPL ?BLOCK.2›059454 LDX TEMP1 new memlo›059457 STX DAUX1›059460 INX ›059461 STX TEMP1›059464 LDA TEMP2›059467 STA DDEVIC›059470 JMP SIOV›059473 ?DCBDAT.2 .BYTE 0 ddevic›059474 .BYTE 1 dunit›059475 .BYTE '& dcomnd›059476 .BYTE $40 dstats›059477 .WORD CASBUF dbuflo/hi›059479 .WORD 30 dtimlo/hi›059481 .WORD 128 dbytlo/hi›059483 .WORD 0 daux1/2›059485 ?59485 STY TEMP1 Search›059488 STA TEMP2 handler chain›059491 LDA # CHLINK-18›059497 STA ZCHAIN+1›059499 ?59499 LDY #$12›059501 LDA (ZCHAIN),Y›059503 TAX ›059504 INY ›059505 LDA (ZCHAIN),Y›059507 CMP TEMP2›059510 BNE ?59519›059512 CPX TEMP1›059515 BNE ?59519›059517 CLC ›059518 RTS ›059519 ?59519 CMP #0›059521 BNE ?59529›059523 CPX #0›059525 BNE ?59529›059527 ?59527 SEC ›059528 RTS ›059529 ?59529 STX ZCHAIN›059531 STA ZCHAIN+1›059533 JSR ADD18›059536 BNE ?59527›059538 BEQ ?59499 Always›059540 ?59540 SEC Handler›059541 PHP warmstart init›059542 BCS ?59584 Always›059544 PDWARM STA DVSTAT+3 Warmstart›059547 STY DVSTAT+2 with chaining›059550 L59550 PHP Cold start init›059551 LDA #0›059553 TAY ›059554 JSR ?59485›059557 BCS ?59598›059559 LDY #$12›059561 LDA DVSTAT+2›059564 STA (ZCHAIN),Y›059566 TAX ›059567 INY ›059568 LDA DVSTAT+3›059571 STA (ZCHAIN),Y›059573 STX ZCHAIN›059575 STA ZCHAIN+1›059577 LDA #0›059579 STA (ZCHAIN),Y›059581 DEY ›059582 STA (ZCHAIN),Y›059584 ?59584 JSR ?JINIT Init handler›059587 BCC ?59601 and update memlo›059589 LDA DVSTAT+3›059592 LDY DVSTAT+2›059595 JSR PDUNLINK›059598 ?59598 PLP ›059599 SEC ›059600 RTS ›059601 ?59601 PLP ›059602 BCS ?59613›059604 LDA #0›059606 LDY #$10›059608 STA (ZCHAIN),Y›059610 INY ›059611 STA (ZCHAIN),Y›059613 ?59613 CLC ›059614 LDY #16›059616 LDA MEMLO›059619 ADC (ZCHAIN),Y›059621 STA MEMLO›059624 INY ›059625 LDA MEMLO+1›059628 ADC (ZCHAIN),Y›059630 STA MEMLO+1›059633 LDY #15›059635 LDA #0›059637 STA (ZCHAIN),Y›059639 JSR ADD18›059642 LDY #15›059644 STA (ZCHAIN),Y›059646 CLC ›059647 RTS ›059648 ?JINIT CLC Init handler›059649 LDA ZCHAIN Get init address›059651 ADC #12›059653 STA TEMP1›059656 LDA ZCHAIN+1›059658 ADC #0›059660 STA TEMP2›059663 JMP (TEMP1) To handler init›059666 JMP DOSETBV Not ref?›059669 PDUNLINK JSR ?59485 Handler›059672 BCS ?59733 unlinking›059674 TAY ›059675 LDA ZCHAIN›059677 PHA ›059678 LDA ZCHAIN+1›059680 PHA ›059681 STX ZCHAIN›059683 STY ZCHAIN+1›059685 LDA COLDST›059688 BNE ?59705›059690 LDY #16›059692 CLC ›059693 LDA (ZCHAIN),Y›059695 INY ›059696 ADC (ZCHAIN),Y›059698 BNE ?59731›059700 JSR ADD18›059703 BNE ?59731›059705 ?59705 LDY #$12›059707 LDA (ZCHAIN),Y›059709 TAX ›059710 INY ›059711 LDA (ZCHAIN),Y›059713 TAY ›059714 PLA ›059715 STA ZCHAIN+1›059717 PLA ›059718 STA ZCHAIN›059720 TYA ›059721 LDY #$13›059723 STA (ZCHAIN),Y›059725 DEY ›059726 TXA ›059727 STA (ZCHAIN),Y›059729 CLC ›059730 RTS ›059731 ?59731 PLA ›059732 PLA ›059733 ?59733 SEC ›059734 RTS ›059735 .BYTE 0 Following was 800›059736 .BYTE 0 entry to Sioutl›059737 JMP SIOUTL Not referenced›