|
|
DataMuseum.dkPresents historical artifacts from the history of: Bogika Butler |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Bogika Butler Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 6144 (0x1800)
Types: TextFile
Names: »C2.RH«
└─⟦d3d1d07f5⟧ Bits:30009789/_.ft.Ibm2.50006621.imd Mogens Pelles Zilog 80,000 / EOS projekt
└─⟦this⟧ »C2.RH«
;RUN TIME LIBRARY (WITH MOST COMMENTS REMOVED) M80 EQU 0 IF M80 ENTRY CCNEG ENTRY MOVMEM ENTRY CCSTAR ENTRY EXIT ENTRY CCAND ENTRY CCASL ENTRY CCASR ENTRY CCDIV ENTRY CCEQ ENTRY CCLT ENTRY CCGT ENTRY CCGE ENTRY CCLE ENTRY CCMULT ENTRY CCNE ENTRY BRK ENTRY CCCOM ENTRY CCOR ENTRY CCGINT ENTRY CCPINT ;ENTRY CCSXT ENTRY CCSUB ENTRY CCULT ENTRY CCUGT ENTRY CCUGE ENTRY CCULE ENTRY CCXOR ENTRY SETEXIT ENTRY RESET ENTRY STREQ ENTRY BDOS ENTRY GETCHAR ENTRY GETS ENTRY PUTCHAR ENTRY SETMEM EXT MAIN ENTRY CCEDATA ENDIF ; ; WHICH CPU? CCSTART: MVI A,2 INR A JPE CIS8080 ; IS Z80 -- THIS CODE WILL NOT WORK IN ROM CLDIR EQU 0B0EDH ; LDIR INSTRUCTION LXI H,CLDIR SHLD CLDIR1 SHLD CLDIR2 XRA A STA CLDIR1+2 STA CLDIR2+2 CIS8080: LXI D,CCIDSTR MVI C,9 CALL CCBDOS LHLD 6 SPHL CALL MAIN RST 0 EXIT EQU 0 ; EXIT() -- FOR C CCIDSTR: DB 'Supersoft C Copyright 1981' DB 0DH,0AH,'Run Time Package V1.0j',0DH,0AH,'$' ; ; ****** READ IN USER CODE HERE ******* ; CC0ERR: POP D PUSH B MVI C,9 CALL CCBDOS LXI H,0 POP B RET CCAND: MOV A,H ANA D MOV H,A MOV A,L ANA E MOV L,A RET CCASL: PUSH B MOV A,L ANI 15 JZ CCARXIT MOV B,A XCHG CCALLP: DAD H DCR B JNZ CCALLP CCALXIT: POP B RET CCASR: PUSH B MOV A,L ANI 15 JZ CCARXIT MOV B,A CCARLP: ORA A MOV A,D RAR MOV D,A MOV A,E RAR MOV E,A DCR B JNZ CCARLP CCARXIT: XCHG POP B RET CCDIV: PUSH B MOV A,H ORA L JNZ CCDV2 CALL CC0ERR DB 'Division by 0',13,10,'$' CCDV2: CALL CCDMSE PUSH PSW CALL CCCOMHL MOV B,H MOV C,L LXI H,0 MVI A,17 PUSH PSW CCDVL1: DAD B JC CCDVL2 MOV A,L SUB C MOV L,A MOV A,H SBB B MOV H,A XRA A CCDVL2: RAL ANI 1 XCHG DAD H PUSH PSW ADD L MOV L,A XCHG POP PSW RAR ANI 80H ADD H MOV H,A POP PSW DCR A JZ CCDVEND PUSH PSW DAD H RAL ANI 1 ADD L MOV L,A JMP CCDVL1 CCDVEND: MOV A,H ANI 7FH MOV H,A XCHG POP PSW POP B RP CALL CCCOMHL XCHG CALL CCCOMHL XCHG RET CCDMSE: MOV A,D XRA H PUSH PSW MOV A,H ANI 80H CNZ CCCOMHL MOV A,D ANI 80H JZ CCDMS1 XCHG CALL CCCOMHL XCHG CCDMS1: POP PSW RET CCEQ: ORA A MOV A,L SUB E MOV L,A MOV A,H SBB D MOV H,A ORA L INX H RZ LXI H,0 RET CCLT: XCHG CCGT: XRA A MOV A,L SUB E MOV A,H SBB D LXI H,0 RP INX H RET CCGE: XCHG CCLE: XRA A MOV A,L SUB E MOV A,H SBB D LXI H,1 RP DCX H RET CCMULT: PUSH B MOV B,H MOV C,L LXI H,0 MVI A,16 CCMULP: XCHG DAD H XCHG JNC CCMUNCY DAD B CCMUNCY: DCR A JZ CCMEXIT DAD H JMP CCMULP CCMEXIT: POP B RET CCCOMHL: MOV A,H CMA MOV H,A MOV A,L CMA MOV L,A INX H RET CCNEG EQU CCCOMHL CCNE: MOV A,L SUB E MOV L,A MOV A,H SBB D MOV H,A ORA L RZ LXI H,1 RET ; CHECK FOR PROGRAM OR STACK OVERLAP BRK: POP D POP H PUSH D PUSH H CALL CCNEG DAD SP JNC C1ERR POP H PUSH H LXI D,EDATA CALL CCSUB+1 ; hl=hl-de JC C1ERR ; JZ C1ERR POP H SHLD CCEDATA POP D PUSH D PUSH D LXI H,0 RET C1ERR: POP D POP D PUSH D PUSH D CERROR: LXI H,-1 RET CCCOM: MOV A,L CMA MOV L,A MOV A,H CMA MOV H,A RET CCOR: MOV A,H ORA D MOV H,A MOV A,L ORA E MOV L,A RET CCGINT: MOV E,M INX H MOV D,M XCHG RET CCPINT: XCHG MOV M,E INX H MOV M,D XCHG RET ;CCSXT: MOV L,A ; RAL ; MVI A,0 ; SBB A ; MOV H,A ; RET ; HL = DE - HL CCSUB: XCHG MOV A,L SUB E MOV L,A MOV A,H SBB D MOV H,A RET CCULT: XCHG CCUGT: MOV A,L SUB E MOV A,H SBB D LXI H,1 RC DCX H RET CCUGE: XCHG CCULE: MOV A,L SUB E MOV A,H SBB D LXI H,0 RC INX H RET CCXOR: MOV A,H XRA D MOV H,A MOV A,L XRA E MOV L,A RET SETEXIT: LXI H,2 DAD SP SHLD CCEXITSP POP H SHLD CCEXITSP+2 PUSH H LXI H,0 RET RESET: POP D POP D LHLD CCEXITSP ; COULD CHECK FOR EXITSP > CURRENT SP SPHL LHLD CCEXITSP+2 PUSH H XCHG RET STREQ: PUSH H MOV H,B MOV L,C SHLD XXKLG ; BAD KLUDGE POP H POP B POP D XTHL PUSH B PUSH B LXI B,0 JMP CCLP CCMORE: INX B INX H INX D CCLP: LDAX D ORA A JZ CCOUT CMP M JZ CCMORE LXI B,0 CCOUT: PUSH B LHLD XXKLG MOV B,H MOV C,L POP H RET BDOS: MOV H,B ; SAVE B MOV L,C POP B ; POP RETURN ADDRESS POP D ; POP NEW D VALUE XTHL ; TOS CONTAINS OLD B; H CONTAINS NEW B PUSH B ; PUSH RETURN ADDRESS MOV B,H ; PUT B VALUE WHERE IT BELONGS MOV C,L CALL CCBDOS POP H POP B PUSH H ; RESTORE STACK FOR C PUSH H PUSH H MOV L,A MVI H,0 ; SHOULD BE A SIGN EXTEND... RET CCBDOS EQU 5 CCCONOU EQU 2 CCCONIN EQU 1 CCGETL EQU 10 GETCHAR: PUSH B MVI C,CCCONIN CALL CCBDOS CPI 1AH LXI H,0 POP B RZ MOV L,A RET ; SHOULD NOT NEED INTERNAL BUFFER--FIX GETS: LXI D,CCGSBUF PUSH B MVI C,CCGETL CALL CCBDOS LXI H,4 DAD SP MOV E,M INX H MOV D,M LXI H,CCGSBUF+1 MOV C,M INX H MOV A,C MOV B,C INR B ORA A JZ CCGSSKP CCGSMOV: MOV A,M ANI 7FH ; REMOVE PARITY STAX D INX H INX D DCR C JNZ CCGSMOV CCGSSKP: XRA A STAX D POP B POP D POP H PUSH D PUSH D RET PUTCHAR: LXI H,2 DAD SP MOV E,M PUSH B MVI C,CCCONOU CALL CCBDOS POP B RET CCMOVMEM: MOV A,M STAX D INX H INX D DCX B MOV A,B ORA C JNZ CCMOVMEM RET ; SHOULD BE IN AUXFN.H: SETMEM: POP H ; RET ADDR POP D ; DATA BYTE MOV A,E POP B ; COUNT XTHL ; SOURCE MOV D,H MOV E,L DCX B INX D MOV M,A CLDIR1: CALL CCMOVMEM XTHL ; HL <- RET ADDR PUSH H PUSH H PUSH H XCHG ; HL <- END DEST RET MOVMEM: MOV H,B MOV L,C SHLD XXKLG POP H ; RET ADDR POP B ; COUNT POP D ; DEST XTHL ; SOURCE CLDIR2: CALL CCMOVMEM XTHL ; HL <- RET ADDR PUSH H LHLD XXKLG MOV B,H MOV C,L POP H PUSH H PUSH H PUSH H XCHG ; HL <- END DEST RET CCCPHL: MOV A,H CMP D RNZ MOV A,L CMP E RET «eof»