09 .OPT NO LIST›10 ; SAVE #D1:CIO.M65›20 ;›30 ;›40 ; LOAD #D1:PERHNDLR.M65›50 ;›60 ; *= $E4C1›70 .PAGE "CIO"›80 LIST ›90 .LOCAL ›0100 CIOCHR = ICAX6Z›0110 ICIDNO = ICAX5Z›0120 ICSPRZ = ICAX3Z›0130 ;›058561 ICIO LDX #0 Init CIO›058563 LDA #$FF clear all›058565 STA ICHID,X iocb's placing›058568 LDA # IIN-1 iocb not open›058575 STA ICPTH,X minus one in›058578 TXA icptl/h›058579 CLC ›058580 ADC #$10 next Iocb›058582 TAX ›058583 CMP #$80 til done›058585 BCC ICIO+2›058587 RTS ›058588 IIN LDY #133 iocb not open›058590 RTS ›058591 CIO STA CIOCHR Save output chr›058593 STX ICIDNO Save iocb index›058595 TXA ›058596 AND #$0F Verify iocb num.›058598 BNE ?CIERR1›058599 ;›058600 CPX #$80›058602 BCC ?IOC1›058603 ;›058604 ?CIERR1 LDY #134 iocb no. err›058606 JMP ?CIRTN1›058607 ;›058609 ?IOC1 LDY #0›058611 ?IOC1A LDA ICHID,X Copy bytes›058614 STA ICHIDZ,Y zero to 11 of›058617 INX the iocb to the›058618 INY zero page iocb›058619 CPY #12 (ichid-icax2)›058621 BCC ?IOC1A›058622 ;›058623 LDA ICHIDZ›058625 CMP #127›058627 BNE ?CMDCHECK›058628 ;›058629 LDA ICCOMZ›058631 CMP #12 Close?›058633 BEQ ?CICLOS›058634 ;›058635 LDA HNDLOD›058638 BNE ?GOTDEV›058639 ;›058640 ERR130 LDY #130 No device err›058641 ;›058642 ?JYEXIT JMP ?CIRTN1›058643 ;›058645 ?GOTDEV JSR INITPD Load per'al›058648 BMI ?JYEXIT handler for open›058649 ; compute internal vector›058650 ?CMDCHECK LDY #132 Xio syntax›058652 LDA ICCOMZ›058654 CMP #3 Open?›058656 BCC ?CIERR4 Err if less›058657 ; move cmd to zpage for index›058658 TAY ›058659 CPY #14 Special cmd?›058661 BCC ?IOC2 No›058662 ;›058663 LDY #14 Set spec index›058664 ;›058665 ?IOC2 STY ICCOMT save vector›058667 LDA ?COMTAB-3,Y get offset›058670 BEQ ?CIOPEN go if open cmd›058671 ;›058672 CMP #2 Close?›058674 BEQ ?CICLOS›058675 ;›058676 CMP #8 Status or Spec?›058678 BCS ?CISTSP›058679 ;›058680 CMP #4 Read?›058682 BEQ ?CIREAD›058683 ;›058684 JMP ?CIWRIT Must be write›058685 ;›058686 ; find dev hdlr in hdlr adrtab›058687 ?CIOPEN LDA ICHIDZ exec open›058689 CMP #$FF›058691 BEQ ?IOC6›058692 ;›058693 LDY #129 Already open!›058695 ?CIERR4 JMP ?CIRTN1 exit›058696 ;›058698 ?IOC6 LDA HNDLOD›058701 BNE ?POLL›058702 ; go find device›058703 JSR ?DEVSRC device search›058706 BCS ?POLL go if not found›058707 ;›058708 LDA #0›058710 STA DVSTAT›058713 STA DVSTAT+1›058714 ; compute hdlr entry point›058715 IOC7›058716 JSR ?COMENT exit if›058719 BCS ?CIERR4 compute error›058720 ; Go to handler for init›058721 JSR ?GOHAND via indir jump›058722 ;›058723 ; Store putbyt-1 into iocb›058724 LDA #11 simulate put chr›058726 STA ICCOMT›058728 JSR ?COMENT compute entry›058731 LDA ICSPRZ move value to›058733 STA ICPTLZ put byte address›058735 LDA ICSPRZ+1›058737 STA ICPTHZ›058739 JMP ?CIRTN2 return to user›058740 ;›058742 ?POLL JSR PDOPENPOLL Poll periph.›058745 JMP ?CIRTN1 ; for open›058746 ;›058747 ;›058748 ?CICLOS LDY #1 ; Exec close›058750 STY ICSTAZ›058752 JSR ?COMENT compute entry›058755 BCS ?CICLO2 ignore error›058756 ;›058757 JSR ?GOHAND to hdlr for cls›058758 ;›058760 ?CICLO2 LDA #$FF set iocb free›058762 STA ICHIDZ›058764 LDA # >IIN-1 set putbyt to›058766 STA ICPTHZ point to err›058768 LDA #