; MACRO IOPROC #1 CALL CALLIO DB #1 MEND ; .CINIT IOPROC 0 ; .CSTAT IOPROC 2 ; .CIN IOPROC 4 ; .CRDY IOPROC 6 ; .COUT IOPROC 8 ; SYS8E .CSET IOPROC 10H ;Sys call 8E ; .RINIT IOPROC 20H ; .RSTAT IOPROC 22H ; .RIN IOPROC 24H ; .PINIT IOPROC 30H ; .PRDY IOPROC 32H ; .POUT IOPROC 34H ; .LINIT IOPROC 40H ; .LRDY IOPROC 42H ; .LOUT IOPROC 44H ; .STRTCLK IOPROC 50H ; .READCLK IOPROC 52H ; CALLIO EX (SP),HL ;return address into HL PUSH BC ;save the registers PUSH DE PUSH AF LD B,H LD C,L LD A,(BC) ;get offset RRCA ;*32 RRCA RRCA LD HL,$IOTAB ;get the right table CALL LIO$ LD A,(BC) ;get offset again CALL LIO$ ;offset into table POP AF POP DE PUSH DE LD BC,URET PUSH BC PUSH HL LD HL,9 ADD HL,SP LD B,(HL) DEC HL LD C,(HL) LD L,C LD H,B RET ; URET POP DE POP BC POP HL RET ; LIO$ AND A,0EH LD E,A LD D,0 ADD HL,DE LD E,(HL) INC HL LD D,(HL) EX DE,HL RET ; NLDIR LD A,B OR A,C RET Z EX DE,HL LDIR EX DE,HL SUB A,A RET ; MULT PUSH BC ;DE=HL*DE PUSH HL LD B,D LD C,E CALL MUL EX DE,HL POP HL POP BC RET ; DIVD PUSH BC ;HL=HL/DE LD B,D ;DE=Remainder LD C,E CALL DIV POP BC RET ; AHXDE LD D,A RRA RRA RRA RRA CALL AHXE LD A,D LD D,E AHXE AND A,0FH ADD A,'0' CP A,3AH LD E,A RET C ADD A,7 LD E,A RET ; PRDIG LD A,(HL) CALL AHXDE LD A,D CALL OUTCH LD A,E JP OUTCH ; PRLIN PUSH IX PRL1 LD IX,($UREGS) LD A,(HL) OR A,A JR Z,PRL3 JP M,PRL2 CALL OUTCH INC HL JR PRL1 ; PRL2 INC HL INC HL AND A,1 CALL NZ,PRDIG DEC HL CALL PRDIG INC HL INC HL JR PRL1 ; PRL3 POP IX RET ; TIDYIO CALL CK.MTR LD HL,($UREGS) LD DE,10H ADD HL,DE PUSH HL CALL .CSTAT POP HL PUSH HL JR C,FKY OR A,A LD A,(HL) JR Z,NOIP CALL .CIN NOIP POP HL LD (HL),0 OR A,A RET Z PUSH HL CP A,CTRLP JR NZ,NCTRP LD A,(IX+15H) XOR A,1 LD (IX+15H),A XOR A,A POP HL RET ; NCTRP CP A,CRTLS JR NZ,NCTRS JCTRS CALL .CSTAT OR A,A JR Z,JCTRS CALL .CIN CP A,CTRLC CALL Z,CCTRAP XOR A,A POP HL RET ; NCTRS POP HL LD (HL),A AND A,A RET ; FKY LD A,(HL) AND A,A JR NZ,NOIP SCF POP HL RET ; OUTCH PUSH HL PUSH DE AND A,7FH PUSH AF CALL TIDYIO POP AF CP A,CTRLW JR NZ,NCTRW SET 0,(IX+15H) POP DE POP HL RET ; NCTRW CP A,CTRLT JR NZ,NCTRT RES 0,(IX+15H) POP DE POP HL RET ; NCTRT CP A,CR JR NZ,N.CR LD (IX+16H),0 JR NTAB ; N.CR CP A,TAB JR NZ,NTAB LD L,(IX+16H) LD DE,8 LD H,D CALL DIVD LD A,8 SUB A,E LD E,A TABEXP LD A,' ' CALL PCHAR DEC E JR NZ,TABEXP POP DE POP HL RET ; NTAB CALL PCHAR POP DE POP HL RET ; PCHAR PUSH DE PUSH HL PUSH AF CALL .COUT LNRDY BIT 0,(IX+15H) JR Z,NOLST CALL TIDYIO CALL .LRDY OR A,A JR Z,LNRDY POP AF PUSH AF CALL .LOUT NOLST POP AF POP HL POP DE CP A,' ' RET M INC (IX+16H) RET ; SVHL EX DE,HL SVDE CALL L$REGC LD (HL),E INC HL LD (HL),D RET ; L.REGC PUSH AF CALL L$REGC LD A,(HL) INC HL LD H,(HL) LD L,A POP AF RET ; L$REGC PUSH BC LD B,0 LD HL,($UREGS) ADD HL,BC POP BC RET ; MUL LD DE,0 ;DEHL=HL*BC EX DE,HL LD A,10H MUL1 OR A,A BIT 0,E JR Z,MUL2 ADD HL,BC MUL2 RR H RR L RR D RR E DEC A JR NZ,MUL1 EX DE,HL RET ; DIV LD DE,0 ;HL=HL/BC , DE=Remainder DIV0 LD A,D CP A,B JR NZ,DIV1 LD A,E CP A,C DIV1 CCF RET C EX DE,HL LD A,10H DIV2 SCF RL E RL D RL L RL H JR NC,DIV3 OR A,A SBC HL,BC JR DIV4 ; DIV3 SBC HL,BC JR NC,DIV4 DEC E ADD HL,BC DIV4 DEC A JR NZ,DIV2 EX DE,HL OR A,A RET ; CK.MTR LD HL,(MTRDLY) LD A,L OR A,H RET Z DEC HL LD (MTRDLY),HL LD A,L OR A,H RET NZ CALL LDD$ PUSH HL CALL SYS96 POP HL CALL SDD$ LD HL,0 LD (MTRDLY),HL RET ; SYS96 LD HL,($$DDTAB) ;Turn motors off LD B,(HL) INC HL LD C,0 MTRO1 LD A,(HL) INC HL OR A,(HL) INC HL JR Z,MTRO2 PUSH BC PUSH HL LD B,C LD C,1 CALL FDCALL POP HL POP BC MTRO2 INC C DJNZ MTRO1 RET ; IDLE JP IDLE ; *INCLUDE CDOS.FDD ; *INCLUDE CDOS.ZIO ; *INCLUDE CDOS.HDD ; END CDOS