Surprise! We've been running on hardware provided by BuyVM for a few months and wanted to show them a little appreciation.
Running a paste site comes with unique challenges, ones that aren't always obvious and hard to control. As such, BuyVM offered us a home where we could worry less about the hosting side of things and focus on maintaining a clean and useful service! Go check them out and show them some love!
Submitted on October 3, 2015 at 05:53 AM

Section 1 (Text)

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640
;**************************************************************
;***	BIG Z MONITOR (1K VERSION 2.0) 9/10/79 AB
;**************************************************************
;	ASSUMPTIONS
;	SERIAL PORT ON BIGZ IS SET TO 10 AND 11H
;	TARBELL TAPE USING STANDARD TARBELL PORTS
;	OR KC STANDARD VIA JADE SERIAL/PARALLEL CARD
;		SET TO PORTS 01 & 81 HEX
;	NO MEMORY SIZE IS ASSUMED
;
; CONDITIONAL ASSEMBLY PARAMETERS
;	DEFINE VALUES OF TRUE/FALSE
TRUE:	EQU	0FFFFH
FALSE:	EQU	0
;
;	SET CONDITIONAL ASSEMBLY VALUES
TARBEL:	EQU	FALSE
KCTAPE:	EQU	TRUE
;
; SYSTEM EQUATES
;
MON:	ORG	0E000H
;
TAPE:	EQU	0
TAPST:	EQU	80H
;KBDST:	EQU	11H
;KBDDT:	EQU	10H
KBDST:	EQU	21H
KBDDT:	EQU	20H
KBDIN:	EQU	02H
KBDOT:	EQU	01H
WAIT:	EQU	0FCH
SECT:	EQU	0FAH
DCOM:	EQU	0F8H
DDATA:	EQU	0FBH
DSTAT:	EQU	0F8H
SBOOT:	EQU	007DH
TARBL:	EQU	6EH
;
;
	JP	INIT
	JP	EXEC
	JP	CONIN
	JP	CONOUT
	JP	HEXIN
	JP	HEXOUT
	JP	DHXOT
	JP	CRLF
	JP	SPACE
	JP	TREAD
	JP	TWRIT
INIT:	LD	B,1		; SET THE RAM FLAG
	LD	A,4EH
	OUT	(KBDST),A
	LD	A,37H
	OUT	(KBDST),A	; INITIALIZE THE ONBOARD UART
	LD	HL,TRUE		; PRELOAD MEMORY ADDRESS
FTOP:	INC	HL
	LD	A,(HL)
	CPL
	LD	(HL),A
	CP	(HL)
	CPL
	LD	(HL),A
	JR	NZ,FTOP1
	LD	B,0
	JR	FTOP
FTOP1:	LD	A,B
	OR	A
	JR	NZ,FTOP	; FIND TOP OF CONTIGIOUS RAM
	DEC	HL		; AND SET STACK TO THIS VALUE
	DEC	HL
	LD	SP,HL
	PUSH	HL
	POP	IY		; SAVE STACK ADDRESS IN IY
; 2 CR/LF'S
	CALL	CRLF
	CALL	CRLF
FTOP2:	LD	HL,MSG1
INIT1:	LD	A,(HL)		; MESSAGE PRINT ROUTINE
	CALL	CONOUT		; PRINT MESSAGE AT HL UNTIL
	INC	HL		; END OF ENTRY IS FOUND (03H)
	CP	03H		; THEN GO TO MONITOR MAIN ENTRY
	JR	NZ,INIT1	; POINT EXEC
	CALL	CRLF
	LD	HL,1
	ADD	HL,SP
	CALL	DHXOT
	JR	EXEC
	IF	TARBEL
MSG1:	DEFM	'JADE COMPUTER SYSTEMS BIG Z MONITOR 2.0B'
	ENDIF
	IF	KCTAPE
MSG1:	DEFM	'JADE COMPUTER SYSTEMS BIG Z MONITOR 2.0A'
	ENDIF
	DEFB	0DH,0AH,0DH,0AH
	DEFB	03H
EXEC:	LD	SP,IY
	IF	TARBEL
	SUB	A
	OUT	(TARBL),A
	ENDIF
EXEC3:	CALL	CRLF
	LD	A,'#'		; MONITOR PROMPT: # SIGN
	CALL	CONOUT
	CALL	SPACE
EXEC4:	CALL	CONIN
	CP	21H
	JP	M,EXEC4		; LOOP ON CONTROL CHARACTERS
	CP	'A'
	JR	Z,ALTER	; MODIFY MEMORY ROUTINE
	CP	'D'
	JR	Z,DUMP	; DUMP MEMORY ROUTINE
	CP	'G'
	JR	Z,GO		; JUMP TO ADDRESS AND RUN
	CP	'C'
	JP	Z,COPY		; MOVE MEMORY ROUTINE
	CP	'T'
	JP	Z,TEST		; TEST MEMORY ROUTINE
	CP	'F'
	JP	Z,FILL		; FILL MEMORY ROUTINE
	CP	'M'
	JP	Z,MAP		; MAP RAM AREAS
	CP	'L'
	JP	Z,LOAD		; WRITE DIRECT INTO MEMORY
	CP	'S'
	JP	Z,TSAVE		; SAVE MEMORY ON CASSETTE
	CP	'R'
	JP	Z,TLOAD		; LOAD MEMORY FROM CASSETTE
	CP	'V'
	JP	Z,VERIFY	; VERIFY TAPE WRITE
	CP	'X'
	JP	Z,STRM		; DO A SYNC STREAM OUTPUT
	IF	KCTAPE
	CP	'Y'
	JP	Z,TUNE		; ADJUST CASSETTE ROUTINE
	ENDIF
	CP	'B'
	JP	Z,BOOT		; TARBELL BOOT ROUTINE
	CP	'E'
	JP	Z,0F000H	; SPECIAL VERSAFLOPPY JUMP
;	THE ABOVE IS A JUMP TO THE VERSAFLOPPY BIOS ROM
	JR	EXEC3
GO:	CALL	SPHIN
	JP	(HL)		; EXECUTE A PROGRAM
ALTER:	CALL	SPHIN
ALT1:	CALL	CRLF
	CALL	DHXOT
	CALL	SPACE
	LD	A,(HL)
	CALL	HEXOUT
	PUSH	HL
	CALL	SPHIN
	LD	E,L
	POP	HL
	CP	0DH
	JP	Z,ALT3
	CP	'/'
	JP	Z,EXEC
	CP	'.'
	JR	NZ,ALT2
	LD	(HL),E
ALT2:	INC	HL
	JR	ALT1
ALT3:	DEC	HL
	JR	ALT1
DUMP:	CALL	DHXIN
DUMP1:	CALL	CRLF
	CALL	DHXOT
	LD	B,16
DUMP2:	CALL	SPACE
	LD	A,(HL)
	CALL	HEXOUT
	CALL	CMPDH
	JP	C,EXEC
	INC	HL
	DEC	B
	JR	NZ,DUMP2
	JR	DUMP1
MAP:	LD	B,1
	LD	HL,0
MAP1:	LD	A,(HL)
	CPL
	LD	(HL),A
	CP	(HL)
	CPL
	LD	(HL),A
	LD	A,0
	JR	Z,MAP2
	INC	A
MAP2:	CP	B
	LD	B,A
	JR	Z,MAP4
	DEC	HL
	OR	A
	JR	NZ,MAP3
	INC	HL
	CALL	CRLF
MAP3:	CALL	DHXOT
	CALL	SPACE
	JR	Z,MAP4
	INC	HL
MAP4:	INC	HL
	LD	A,L
	OR	H
	JR	NZ,MAP1
	LD	A,B
	OR	A
	JP	NZ,EXEC
	DEC	HL
	CALL	DHXOT
	JP	EXEC
LOAD:	CALL	SPACE
LOAD0:	CALL	LHXIN
	JR	NZ,LOAD0
LOAD1:	CALL	LHXIN
	CP	' '
	JR	NZ,LOAD0
	EX	DE,HL
LOAD2:	CALL	LHXIN
	PUSH	AF
	LD	A,L
	LD	(DE),A
	INC	DE
	POP	AF
	JR	NZ,LOAD2
	JR	LOAD1
LHXIN:	CALL	HEXIN
	CP	0AH
	JR	Z,LHXIN
	OR	A
	JR	Z,LHXIN
	CP	'#'
	JP	Z,EXEC
	CP	0DH
	RET
FILL:	CALL	DHXIN
	SUB	0DH
	JR	Z,FILL0
	PUSH	HL
	CALL	HEXIN
	LD	A,L
	POP	HL
FILL0:	DEC	HL
FILL1:	INC	HL
	LD	(HL),A
	CALL	CMPDH
	JR	NC,FILL1
	JP	EXEC
COPY:	CALL	TRPIN
	CALL	COPY0
	JP	EXEC
COPY0:	DEC	DE
	DEC	BC
COPY1:	INC	DE
	INC	BC
	LD	(DE),A
	LD	A,(BC)
	CALL	CMPDH
	JR	NC,COPY1
	RET
TEST:	CALL	DHXIN
	INC	DE		; ADD 1 TO ENDING ADDRESS
	PUSH	HL
	POP	IY		; SAVE STARTING ADDRESS
	LD	C,256		; TOTAL NUMBER OF PASSES
	LD	B,0		; STARTING PATTERN
TEST0:	PUSH	IX
	POP	HL		; SET PRESERVED START ADDRESS
TEST1:	LD	A,L
	XOR	H
	XOR	B
	LD	(HL),A
	INC	HL
	LD	A,H
	CP	D
	JR	NZ,TEST1
	PUSH	IX
	POP	HL		; FETCH START ADDRESS FOR READ TEST
TEST2:	LD	A,L
	XOR	H
	XOR	B
	CP	(HL)
	CALL	NZ,ERRO		; FOUND AN ERROR, EXIT
	INC	HL
	LD	A,H
	CP	D
	JR	NZ,TEST2
	INC	B
	LD	A,'P'
	CALL	CONOUT
	DEC	C
	JR	NZ,TEST0
	JP	EXEC
ERRO:	PUSH	AF
	PUSH	HL
	CALL	DHXOT
	CALL	SPACE
	LD	A,B
	CALL	HEXOUT
	CALL	SPACE
	POP	AF
	CALL	HEXOUT
	CALL	CRLF
	POP	HL
	RET
;
;
	IF	KCTAPE
TLOAD:	CALL	DHXIN
	CALL	TREAD
	JP	Z,EXEC
	CALL	SPACE
	LD	A,'#'
	CALL	CONOUT
	JP	EXEC
TREAD:	LD	A,0B0H
	OUT	(TAPST),A
TRDA:	LD	B,4
TRDB:	CALL	CIN
	CP	0FFH
	JR	NZ,TRDA
	DEC	BC
	JR	NZ,TRDB
TRDC:	CALL	CIN
	CP	0FFH
	JR	Z,TRDA
	CP	0E6H
	JR	NZ,TRDA
	LD	B,0
	LD	A,'$'
	CALL	CONOUT
	DEC	HL
TRD1:	INC	HL
	CALL	CIN
	LD	(HL),A
	ADD	A,B
	LD	B,A
	CALL	CMPDH
	JR	NC,TRD1
	CALL	CIN
	CP	B
	RET
CIN:	IN	A,(TAPST)
	AND	01H
	JR	Z,CIN
	IN	A,(TAPE)
	RET
TUNE:	CALL	SPACE
	LD	A,0B0H
	OUT	(TAPST),A
TUN0:	CALL	CRLF
	LD	H,32
TUN1:
TUN2:	CALL	CIN
	CP	0FFH
	JR	Z,TUN2
	LD	L,'+'
	CP	0E6H
	JR	Z,TUN3
	LD	L,'?'
TUN3:	LD	A,L
	CALL	CONOUT
	DEC	H
	JR	NZ,TUN1
	JR	TUN0
TSAVE:	CALL	DHXIN
	CALL	TWRIT
	JP	EXEC
TWRIT:	LD	A,0B0H
	OUT	(TAPST),A
	LD	B,16
TWRT0:	LD	A,0FFH
	CALL	COUT
	DEC	B
	JR	NZ,TWRT0
	LD	A,0E6H
	CALL	COUT
	DEC	HL
	LD	B,0
TWRT1:	INC	HL
	LD	A,(HL)
	CALL	COUT
	ADD	A,B
	LD	B,A
	CALL	CMPDH
	JR	NC,TWRT1
	LD	A,B
	CALL	COUT
	CALL	COUT
	JR	COUT
COUT:	PUSH	AF
	IN	A,(TAPST)
	AND	80H
	JR	Z,COUT+1
	POP	AF
	OUT	(TAPE),A
	RET
STRM:	CALL	SPACE
	LD	A,0B0H
	OUT	(TAPST),A
STRM1:	LD	A,0FFH
	CALL	COUT
	LD	A,0E6H
	CALL	COUT
	JR	STRM1
	ENDIF
;
	IF	TARBEL
TLOAD:	CALL	DHXIN
	CALL	TREAD
	JP	Z,EXEC
	LD	A,'#'
	CALL	CONOUT
	JP	EXEC
TREAD:	LD	A,1
	OUT	(TARBL),A
	PUSH	HL
	LD	HL,20000
	CALL	DELAY
	POP	HL
	LD	B,0
	LD	A,11H
	OUT	(TARBL),A
	DEC	HL
TRD1:	INC	HL
	CALL	CIN
	LD	(HL),A
	ADD	A,B
	LD	B,A
	CALL	CMPDH
	JR	NC,TRD1
	CALL	CIN
	CP	B
	PUSH	AF
	SUB	A
	OUT	(TARBL),A
	POP	AF
	RET
CIN:	IN	A,(TARBL)
	AND	10H
	JR	NZ,CIN
	IN	A,(TARBL+1)
	RET
TSAVE:	CALL	DHXIN
	CALL	TWRIT
	JP	EXEC
TWRIT:	LD	A,2
	OUT	(TARBL),A
	PUSH	HL
	LD	HL,TRUE
	CALL	DELAY
	POP	HL
	SUB	A
	LD	B,A
	CALL	COUT
	LD	A,0E6H
	CALL	COUT
	DEC	HL
TWRT1:	INC	HL
	LD	A,(HL)
	CALL	COUT
	ADD	A,B
	LD	B,A
	CALL	CMPDH
	JR	NC,TWRT1
	LD	A,B
	CALL	COUT
	CALL	COUT
	CALL	COUT
	SUB	A
	OUT	(TARBL),A
	RET
COUT:	PUSH	AF
	IN	A,(TARBL)
	AND	20H
	JR	NZ,COUT+1
	POP	AF
	OUT	(TARBL+1),A
	RET
STRM:	CALL	SPACE
	LD	A,2
	OUT	(TARBL),A
STRM1:	LD	A,0E6H
	CALL	COUT
	JR	STRM1
DELAY:	EX	(SP),HL
	EX	(SP),HL
	DEC	HL
	LD	A,L
	OR	H
	JR	NZ,DELAY
	RET
	ENDIF
;
VERIFY:	CALL	TRPIN
	EX	DE,HL
	DEC	HL
	DEC	BC
VRFY1:	INC	HL
	INC	BC
	LD	(BC),A
	CP	(HL)
	JR	Z,VRFY2
	CALL	CRLF
	CALL	DHXOT
	CALL	SPACE
	LD	A,(HL)
	CALL	HEXOUT
	CALL	SPACE
	LD	(BC),A
	CALL	HEXOUT
VRFY2:	CALL	CMPDH
	JR	NC,VRFY1
	JP	EXEC
CMPDH:	PUSH	AF
	LD	A,D
	CP	H
	JR	NZ,CMP1
	LD	A,E
	CP	L
	JR	NZ,CMP1
	POP	AF
	SCF
	RET
CMP1:	POP	AF
	SCF
	CCF
	RET
DHXIN:	CALL	SPHIN
	PUSH	HL
	CP	0DH
	CALL	NZ,HEXIN
	EX	DE,HL		; LOAD BOTH HL AND DE WITH ADDRESS
	POP	HL
	RET
SPHIN:	CALL	SPACE
HEXIN:	LD	HL,0
HXIN1:	CALL	CONIN		; LOAD HL WITH ONE OR TWO HEX VALUES
	CP	'0'		; IF MORE THAN TWO ARE ENTERED, KEEP
	RET	M		; THE LAST TWO. EXIT WITH LAST
	CP	'F'+1		; CHARACTER ENTERED IN THE A REGISTER,
	RET	P		; AND IF LAST IS CR SET Z FLAG.
	CP	'9'+1
	JP	M,HXIN2
	CP	'A'
	RET	M
	ADC	A,9
HXIN2:	AND	0FH
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	OR	L
	LD	L,A
	JR	HXIN1
TRPIN:	CALL	SPHIN
	EX	DE,HL		; LOAD ALL THREE PAIRS WITH HEX
	CALL	HEXIN		; ENTRIES
	PUSH	HL
	CALL	HEXIN
	PUSH	HL
	POP	BC
	POP	HL
	RET
DHXOT:	LD	A,H		; DISPLAY CURRENT HL VALUE
	CALL	HEXOUT
	LD	A,L
HEXOUT:	PUSH	AF
	RRCA
	RRCA
	RRCA
	RRCA
	CALL	HXOT1
	POP	AF
HXOT1:	AND	0FH
	ADD	A,30H
	CP	'9'+1
	JP	M,CONOUT
	ADD	A,7
	JP	CONOUT
CRLF:	PUSH	AF
	LD	A,0DH
	CALL	CONOUT
	LD	A,0AH
	CALL	CONOUT
	POP	AF
	RET
SPACE:	PUSH	AF
	LD	A,20H
	CALL	CONOUT
	POP	AF
	RET
CONOUT:	PUSH	AF
	IN	A,(KBDST)
	AND	KBDOT
	JR	Z,CONOUT+1
	POP	AF
	OUT	(KBDDT),A
	RET
CONIN:	IN	A,(KBDST)
	AND	KBDIN
	JR	Z,CONIN
	IN	A,(KBDDT)
	AND	7FH
	CP	61H
	JR	C,ECHO
	CP	7CH
	JR	NC,ECHO
	SUB	20H
ECHO:	CP	18H
	JP	Z,EXEC
	JR	CONOUT
PTXT:	LD	A,(HL)
	CP	03H		; PRINT A MESSAGE BEGINNING AT
	RET	Z		; AODENDING WITH A CONTC
	CALL	CONOUT
	INC	HL
	JR	PTXT
BOOT:	IN	A,(WAIT)
	XOR	A
	LD	L,A
	LD	H,A
	INC	A
	OUT	(SECT),A
	LD	A,8CH
	OUT	(DCOM),A
RLOOP:	IN	A,(WAIT)
	OR	A
	JP	P,RDONE
	IN	A,(DDATA)
	LD	(HL),A
	INC	HL
	JP	RLOOP
RDONE:	IN	A,(DSTAT)
	OR	A
	JP	Z,SBOOT
	HALT
;
	END