|
DataMuseum.dkPresents historical artifacts from the history of: Zilog MCZ Floppy Disks |
This is an automatic "excavation" of a thematic subset of
Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 5901 (0x170d) Types: TextFile Names: »WILD.05.S«
└─⟦329ff8d5f⟧ Bits:30006811 8" ZilogMCZ floppy NThun_0013 (SYSTEM MCZ 1/05) └─ ⟦this⟧ »WILD.05.S«
*H PLOTTER DRIVER *P 60 ;************************************************ ;* RIO DRIVER FOR PLOTTER TABLE * ;* J\RGEN KRISTENSEN * ;* S/C METRIC A/S * ;* 84 01 13 MCZ 1 / 05 TRIBLE FLOPPY * ;* 00 INITIALIZE 03 * ;* 02 ASSIGN 03 * ;* 04 OPEN 03 * ;* 06 CLOSE 03 * ;* 0E WRITE BINARY 04 * ;* 10 WRITE LINE 04 * ;* 44 DEACTIVATE 04 * ;************************************************ ; ; R E Q U E S T C O D E S ; ------------------------- INITRQ EQU 00 ; INITIALISATION REQUEST ASSNRQ EQU 02 ; ASSIGN REQUEST OPENRQ EQU 04 ; OPEN REQUEST CLOSRQ EQU 06 ; CLOSE REQUEST RDBIRQ EQU 0AH ; READ BINARY RDASRQ EQU 0CH ; READ ASCII WRTBRQ EQU 0EH ; WRITE BINARY REQUEST WRTLRQ EQU 10H ; WRITE ASCII REQUEST DEACRQ EQU 44H ; DEACTIVATE REQUEST ; ; P O R T A D R E S S E S ; ------------------------- S_11AD EQU 04H ; SIO S_11BD EQU 05H S_11AC EQU 06H S_11BC EQU 07H ; C_11_0 EQU 0CH ; BAUD RATE SIO C_11_1 EQU 0DH C_11_2 EQU 0EH C_11_3 EQU 0FH ; ; A S C I I C O D E S ; --------------------- TAB EQU 09H ASCICR EQU 0DH ASCILF EQU 0AH E_O_F EQU 0FFH ; END OF FILE MARK ; ; B I T D E F I N I T I O N S ; ----------------------------- RX_RDY EQU 0 ; RECIEVER READY BIT TX_RDY EQU 2 ; TRANSMITTER READY BIT ALLSENT EQU 0 ; TRANSMITTER EMPTY BIT ; ; S Y S T E M A D R E S S E S ; ----------------------------- ERCODE EQU 13BDH ; ERROR CODE ADDRESS DATE EQU 13ABH ; GLOBAL DATE *H DRIVER START ; R E Q U E S T C O D E D E C O D E ; ------------------------------------- GLOBAL DRAW ; ORG 0FA80H ; START PLOT DRIVER SIO ; DRAW CALL DEC_REQ ; DECODE REQUEST CODE DEFB 7 ; NUMBER OF VALID REQUEST CODES ; DEFB INITRQ DEFW S_INITRQ ; INITIALIZE ; DEFB ASSNRQ ; ASSIGN REQUEST ? DEFW S_INITRQ ; INITIALIZE ; DEFB OPENRQ ; OPEN REQUEST ? DEFW S_OPENRQ ; DEFB CLOSRQ ; CLOSE - JUST RETURN DEFW OKEXIT ; DEFB WRTBRQ ; WRITE BINARY REQUEST ? DEFW S_WRTBRQ ; DEFB WRTLRQ ; WRITE LINE REQUEST ? DEFW S_WRTLRQ ; DEFB DEACRQ ; DEACTIVATE - JUST RETURN DEFW S_DEACRQ *H INITIALIZE ; 0 0 I N I T I A L I Z E ; ------------------------- ; S_INITRQ LD HL,I_SIO ; INITIALIZE SIO CALL INIT IN A,(S_11AD) ; RET ; ; ; 0 4 O P E N R E Q U E S T ; ----------------------------- ; S_OPENRQ RET ; ; ; 0 6 C L O S E R E Q U E S T ; ------------------------------- ; S_CLOSRQ RET *H WRITE BINARY ; 0 E W R I T E B I N A R Y ; ----------------------------- ; S_WRTBRQ RET Z ; IF BC = 0 RETURN ; LOOP_B LD A,(HL) ; GET BYTE FOR OUTPUT ; CP E_O_F ; END OF FILE MARK ? JP Z,ENDFIL ; CALL SEND ; SEND 1 CHARACTER TO PLOTTER CP ASCICR ; IF ASCICR SEND LF CALL Z,SEND_LF ; SEND LF AFTER CR CPI ; INC HL DEC BC JP PE,LOOP_B OKEXIT RET ; ; ; 1 0 W R I T E L I N E ; ------------------------- S_WRTLRQ RET Z ; IF BC = 0 RETURN ; LOOP_L LD A,(HL) ; GET BYTE FOR OUTPUT ; CP E_O_F ; END OF FILE MARK ? JP Z,ENDFIL ; CALL SEND ; SEND 1 CHARACTER TO PLOTTER CP ASCICR ; IF ASCICR SEND LF CALL Z,SEND_LF ; SEND LF AFTER CR LD A,ASCICR ; IS IT A C.RETURN CPI ; INC HL DEC BC JR Z,ENDLIN ; JP PE,LOOP_L RET ; ; ------------------------- ; FILEND CPI ENDFIL ENDLIN LD L,(IY+4) ; CALCULATE HOW MANY LD H,(IY+5) ; BYTES HAVE BEEN OUTPUT AND A ; FROM BUFFER SBC HL,BC LD (IY+4),L ; LOAD INTO VECTOR LD (IY+5),H RET ; ; 4 4 D E A C T I V A T E R E Q U E S T ; ----------------------------------------- ; S_DEACRQ RET *H ; S E N D 1 C H A R A C T E R T O P L O T T E R ; ----------------------------------------------------- ; SEND_LF LD A,ASCILF ; SEND PUSH AF ; SAVE CHARACTER ; WAITB LD A,1 ; REG 1 OUT (S_11AC),A IN A,(S_11AC) ; READ STATUS SIO BIT ALLSENT,A ; TEST SIO EMPTY JR Z,WAITB ; TEST AGAIN ; XOR A ; A = 0 DELAY NOP DEC A JR NZ,DELAY ; POP AF ; RESTORE OUT (S_11AD),A RET ; *H INITIALIZE DATA ; I N I T I A L I Z E D A T A ; ----------------------------- ; I_SIO SI_11A DEFB 9 ; LENGTH INIT SIO 1.1 A DEFB S_11AC ; PORT NUMBER SIO 1.1 A ; DEFB 00011000B ; NEXT REG. = 0 RESET DEFB 3 ; NEXT REG. = 3 DEFB 11100000B ; 8 BIT AUTO ENABLE DEFB 4 ; NEXT REG. = 4 DEFB 01001100B ; X16 CLOCK 1 STOPBIT NO PARITY DEFB 5 ; NEXT REG. = 5 DEFB 11101010B ; DTR, 8 BIT, RTS DEFB 1 ; NEXT REG. = 1 DEFB 00000000B ; NO INTERRUPT ; CTC110 DEFB 2 ; LENGTH CTC INITIALIZE DEFB C_11_0 ; CTC 1.1 CHANNEL 0 DEFB 00000111B ; TIMER MODE PRESCALER = 16 DEFB 1 ; 9600 BAUD ; DEFB 00 ; END OF INITIALIZE ; *H INIT ; INITIALIZE SIO'S + CTC'S + PIO'S ; -------------------------------- ; ; (HL) = LENGTH ; (HL+1) = CONTROL PORT ; (HL+2) = INITIALIZE DATA ; ; HL > DEFB N ; DEFB PORT ; DEFB DATA_1 ; DEFB DATA_2 ; : ; : ; DEFB DATA_N ; N+1 DEFB 00 ; STOP CONDITION ; INIT LD A,(HL) ; A = LENGTH AND A ; A = 0 FINISH RET Z ; END OF INITIALIZE LD B,A ; B = LENGTH OF INITIALIZE INC HL LD C,(HL) ; C = PORT ADDRESS INC HL OTIR ; SEND TO DEVICE JR INIT ; REPEAT ; ; *H REQUEST CODE DECODE ; GLOBAL DEC_REQ OKEXIT ;START CALL DEC_REQ ; DRIVER EXAMPLE. ; DEFB N ; NUMBER OF VALID REQ. CODES ; DEFB OP_CODE_1 ; DEFW START_OP_CODE_1 ; DEFB OP_CODE_2 ; DEFW START_OP_CODE_2 ; : ; : ; DEFB OP_CODE_#N ; DEFW START_OP_CODE_#N ; DEC_REQ LD HL,IORTN1 ; HL = COMMON RETURN POINT EX HL,(SP) ; HL = OPCODE TABLE START LD (IY+10),80H ; GOOD COMPLETION CODE LD A,(IY+1) ; A = OPCODE LD B,(HL) ; B = NUMBER OF OPCODES INC HL SEARCH CP (HL) ; OPCODE FOUND ? JR,Z FOUND ; YES INC HL INC HL INC HL DJNZ SEARCH ; MORE VALID OPCODES ? ; LD (IY+10),0C1H ; INVALID REQUEST CODE RET ; FOUND INC HL LD A,(HL) INC HL LD H,(HL) LD L,A PUSH HL ; SAVE REQ. CODE START ON STACK ; LD L,(IY+2) LD H,(IY+3) ; HL = DATA START ADDRESS ; LD C,(IY+4) LD B,(IY+5) ; BC = DATA LENGTH ; LD A,B OR C ; Z = 1 IF BC = 0 RET ; IORTN1: BIT 6,(IY+10) JR Z,IORET ERRTN: LD H,(IY+9) LD L,(IY+8) LD A,H OR L JR Z,IORET JP (HL) IORET: BIT 0,(IY+1) ; CHECK WHICH RETURN RET Z LD H,(IY+7) ; RETURN TO COMPLETION ADDRESS LD L,(IY+6) JP (HL) END