; 8080 runtime code for chung-yuen tiny pascal compiler ; and translator. ; ; This code is based at 1A00H as this was under the NSDOS before NSDOS52DQ. ; With later DOS versions this code would need to have its ORG higher in memory. ; Perhaps at FA00 H. ; DOSENTRY EQU 2028H CHAROUT EQU 200DH CHARIN EQU 2010H ; M200D EQU CHAROUT M2010 EQU CHARIN M2028 EQU DOSENTRY ORG 01A00H M1A00: INX H SHLD M1DF2 DCX H DCX H XCHG SHLD M1DF4 LXI H, 5 DAD D LXI B,M2028 MOV M, B INX H MOV M, C RET ; M1A15: PUSH D M1A16: MOV E, M DCX H MOV D, M XCHG DCR A JNZ M1A16 POP D RET ; M1A20: XCHG INX H MOV M, B INX H MOV M, C XCHG RET ; M1A27: DAD D XCHG LHLD M1DF4 DAD D RNC LXI H, M1A38 CALL M1BF3 POP H JMP M2028 ;JMP DOS ENTRY ; M1A38: DB ' STACK' M1A3E: DB ' OVERFLOW',13,10 M1A49: LHLD M1DF2 CALL M1A15 JMP M1A55 ; M1A52: LHLD M1DF2 M1A55: INX D M1A56: DAD B DCX H MOV A,M STAX D INX H MOV A,M INX D STAX D RET ; M1A5F: XRA A M1A60: LHLD M1DF2 ORA A CNZ M1A15 DAD B XCHG MOV C, M DCX H MOV B, M XCHG DAD B JMP M1A56 ; M1A71: LHLD M1DF2 CALL M1A15 JMP M1A7D M1A7A: LHLD M1DF2 M1A7D: DAD B LDAX D MOV M,A DCX H DCX D LDAX D MOV M,A DCX D RET ; M1A86: XRA A M1A87: XCHG MOV E, M DCX H MOV D, M DCX H PUSH D M1A8D: MOV E, M DCX H M1A8F: MOV D, M DCX H XCHG DAD H DAD B MOV B, H MOV C, L LHLD M1DF2 ORA A CNZ M1A15 DAD B POP B MOV M, C DCX H MOV M, B RET M1AA3: LHLD M1DF2 MOV B, H MOV C, L CALL M1A15 JMP M1AB3 ; M1AAE: LHLD M1DF2 MOV B, H MOV C, L M1AB3: PUSH D XCHG INX H MOV M, D INX H MOV M, E SHLD M1DF2 POP D INX H MOV M, B INX H MOV M, C POP B PUSH B INX B INX B INX B INX H MOV M, B INX H MOV M, C RET ; M1ACB: XCHG MOV E, M DCX H MOV D, M MVI M,000H LDAX D INX H MOV M,A XCHG RET ; M1AD6: LDAX D DCX D DCX D CALL M1BCC MOV M,A RET ; M1ADE: CALL M1BCC PCHL ; M1AE2: CALL M2010 ;CALL DOS CHAR IN MOV B, A JMP M200D ;ECHO TO DOS CHAR OUT ; M1AE9: INX D XRA A STAX D INX D CALL M1AE2 STAX D RET ; M1AF2: LDAX D DCX D DCX D MOV B, A JMP M200D ; M1AF9: PUSH D M1AFA: MVI B,03FH CALL M200D MOV D, B XRA A STA M1B78 MOV H, A MOV L, A M1B06: CALL M1AE2 CPI 020H JZ M1B06 CPI 02BH JZ M1B1B CPI 02DH JNZ M1B1E STA M1B78 M1B1B: CALL M1AE2 M1B1E: SUI 030H JM M1B43 CPI 00AH JP M1B43 MOV E, A XRA A MOV D, A DAD H MOV B, H MOV C, L DAD H ADC A DAD H ADC A DAD B ADC A DAD D ADC A JNZ M1B3D ORA H JP M1B1B M1B3D: LXI H, M1B6B JMP M1B57 M1B43: XRA A ADD D JNZ M1B54 LDA M1B78 ORA A CNZ M1BD3 POP D INX D JMP M1BC6 M1B54: LXI H, M1B5D M1B57: CALL M1BF3 JMP M1AFA M1B5D: DB ' INPUT ERROR',13,10 M1B6B: DB ' SIZE ERROR',13,10 M1B78: NOP M1B79: CALL M1BCC PUSH D XRA A DCR A PUSH PSW ANA H JP M1B8C MVI B,02DH CALL M200D CALL M1BD3 M1B8C: LXI B,10 CALL M1C77 MVI A,030H ADD E PUSH PSW MOV A,H ORA L JNZ M1B8C POP PSW M1B9C: MOV B, A CALL M200D POP PSW JP M1B9C POP D RET ; M1BA6: LHLD M1DF2 INX H M1BAA: MOV D, M INX H MOV E, M XCHG SHLD M1DF2 XCHG INX H MOV D, M INX H MOV E, M LXI B,-6 DAD B XCHG PCHL M1BBC: XCHG MOV C, M DCX H MOV B, M M1BC0: DCX H MOV E, M DCX H MOV D, M XCHG RET M1BC6: XCHG MOV M, D INX H MOV M, E XCHG RET M1BCC: XCHG MOV E, M DCX H MOV D, M DCX H XCHG RET M1BD3: XRA A SUB L MOV L, A SBB H SUB L MOV H, A SUI 080H ORA L RNZ JMP M1BEA M1BE0: XRA A SUB C MOV C, A SBB B SUB C MOV B, A SUI 080H ORA C RNZ M1BEA: LXI H, M1A3E CALL M1BF3 JMP M1BC6 M1BF3: MVI C,00AH M1BF5: MOV B, M INX H CALL M200D CMP C JNZ M1BF5 RET M1BFF: CALL M1BE0 M1C02: MOV A,B M1C03: XRA H DAD B MOV C, A RAR XRA C XRA H JP M1BC6 M1C0F: JMP M1BEA CALL M1BBC M1C15: JMP M1C02 CALL M1BBC MOV A,B SUI 080H ORA C JNZ M1BFF MOV A,C JMP M1C03 ; M1C23: XCHG XRA A SUB M MOV M,A MOV C, A DCX H SBB M SUB C MOV M,A INX H XCHG RET M1C2F: MVI D,008H M1C31: DAD H RLC JNC M1C37 DAD B M1C37: DCR D JNZ M1C31 RET ; M1C3C: CALL M1BBC PUSH D MOV A,H MOV E, L LXI H, 0 ORA A CNZ M1C2F MOV A,E CALL M1C2F POP D JMP M1BC6 ; M1C51: CALL M1BBC PUSH D CALL M1C77 POP D JMP M1BC6 M1C5C: LXI H, M1C68 CALL M1BF3 LXI H, 0 MOV D, H MOV E, L RET M1C68: DB ' DIVIDE CHECK',13,10 M1C77: MOV A,B ORA C JZ M1C5C XRA A ADD B PUSH PSW CP M1BE0 XRA A ADD H PUSH PSW CM M1BD3 XCHG LXI H, 0 MVI A,010H M1C8E: DAD H XCHG DAD H XCHG JNC M1C96 INX H M1C96: PUSH H DAD B JNC M1CA5 INR E INX SP INX SP DCR A JNZ M1C8E JMP M1CAA M1CA5: POP H DCR A JNZ M1C8E M1CAA: XCHG POP B POP PSW XRA B M1CAE: CM M1BD3 MOV A,D ORA E RZ M1CB4: XRA A ADD B RP XRA A SUB E MOV E, A SBB D SUB E MOV D, A RET ; M1CBE: LDAX D ANI 001H STAX D XRA A DCX D STAX D INX D RET ; M1CC7: CALL M1BBC PUSH D CALL M1C77 XCHG POP D JMP M1BC6 ; M1CD3: MVI A,001H M1CD5: PUSH PSW CALL M1BBC XRA A STAX D INX D MOV A,L CMP C JNZ M1D02 MOV A,H CMP B JNZ M1D02 M1CE6: POP PSW STAX D RET ; M1CE9: XRA A JMP M1CD5 ; M1CED: MVI B,000H MOV C, B M1CF0: PUSH B CALL M1BBC XRA A STAX D INX D MOV A,H CMP B JZ M1D07 RAR XRA H XRA B JM M1CE6 M1D02: POP PSW XRI 001H STAX D RET ; M1D07: MOV A,L CMP C JC M1CE6 POP B MOV A,B JNZ M1D12 XRA C M1D12: XRI 001H STAX D RET ; M1D16: MVI B,001H MVI C,000H JMP M1CF0 ; M1D1D: MVI B,000H MVI C,001H JMP M1CF0 ; M1D24: MVI B,001H MOV C, B JMP M1CF0 ; M1D2A: CALL M1BBC MOV A,H ORA B STAX D MOV A,L ORA C INX D STAX D RET ; M1D35: CALL M1BBC MOV A,H ANA B STAX D MOV A,L ANA C INX D STAX D RET ; M1D40: LDAX D CMA STAX D DCX D LDAX D CMA STAX D INX D RET ; M1D49: CALL M1BBC XRA A ADD C RZ JM M1D64 M1D52: DAD H DCR A JNZ M1D52 JMP M1BC6 ; M1D5A: CALL M1BBC XRA A SUB C RZ JP M1D52 MOV C, A M1D64: XRA A ORA H RAR MOV H, A MOV A,L RAR MOV L, A INR C JNZ M1D64 JMP M1BC6 ; M1D72: LDAX D ADI 001H STAX D RNC MOV H, D MOV L, E DCX H INR M RET ; M1D7C: LDAX D SUI 001H STAX D RNC MOV H, D MOV L, E DCX H DCR M RET ; M1D86: MOV H, D MOV L, E INX D DCX H MOV A,M STAX D INX D INX H MOV A,M STAX D RET ; M1D91: INX D M1D92: CALL M1D9E ADD C STAX D CALL M1D9E ADD C INX D STAX D RET M1D9E: CALL M1DA6 RLC RLC RLC RLC MOV C, A M1DA6: CALL M1AE2 SUI 030H JM M1DB9 CPI 00AH RM SUI 007H JM M1DB9 CPI 010H RM M1DB9: LXI H, M1B5D CALL M1BF3 POP H POP H JMP M1D92 ; M1DC4: LDAX D MOV L, A DCX D LDAX D DCX D CALL M1DCD MOV A,L M1DCD: MOV C, A ANI 0F0H RRC RRC RRC RRC CALL M1DDA MOV A,C ANI 00FH M1DDA: CPI 00AH JM M1DE1 ADI 007H M1DE1: ADI 030H MOV B, A JMP M200D ; M1DE7: POP H ;PRINT A STRING M1DE8: MOV B, M CALL M200D INX H DCR C JNZ M1DE8 PCHL ; M1DF2: NOP NOP M1DF4: NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP