DataMuseum.dk

Presents historical artifacts from the history of:

Bogika Butler

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Bogika Butler

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦431eaac3b⟧ TextFile

    Length: 6144 (0x1800)
    Types: TextFile
    Names: »C2.RH«

Derivation

└─⟦d3d1d07f5⟧ Bits:30009789/_.ft.Ibm2.50006621.imd Mogens Pelles Zilog 80,000 / EOS projekt
    └─⟦this⟧ »C2.RH« 

TextFile

;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»