; Main changes to ge this compiled with AS:
; -> remove semicolons used to separate statements
; -> rework statements that spanned multiple lines to single-line statements
; -> change % to ; (comment lead-in)
; -> rework hex constants #... to ...h
; -> change CONST to EQU resp. =
; -> change BYTE/WORD to DB/DW
; -> change macro(s) to AS-style
; -> change Rn to Rn^ for OTIR/IN/OUT (did this work with original assembler?)
; -> change TIME to ITIME (conflicts with built-in symbol)
; -> change ORIGIN to ORG resp. RORG
CPU Z8002:AMDSyntax=1
include "bitfuncs.inc"
SUPMODE ON
; PROGRAM PROCMTR ; TODO
TITLE 'PROC.070 MONITOR V2.0'
ORG 0h
PAGE 0
;
CPT = 0C001H ;CONSOLE PORT UPD 7201 CHIP
SPT = 0C005H ;TTY PORT UPD 7201 CHIP
BKP = 0E100H ;BREAKPOINT REGISTER
TPT = 0C011H ;TIMER PORT
TMD2 = 0B6H ;TIMER 2 MODE
TMD1 = 76H ;TIMER 1 MODE
TMD0 = 036H ;TIMER 0 MODE
RT96 = 14H ;TIMER RATE FOR 9600
BNKMSK = 0FF80H ;BANKSWITCH MASK
;
CR = 0DH ;CARRIAGE RETURN
LF = 0AH ;LINE FEED
ESC = 1BH ;ESCAPE
DEL = 7FH ;CHARACTER DELETE
CAN = 18H ;LINE CANCEL
BSP = 08H ;BACKSPACE
;
USERP = 1000H ;USER PROM ADDRESS
DATA = 7E04H ;NPSAREA AND DATA STORAGE AREA
SYMDE = 4000H ;SYSTEM MODE FLAG CONTROL WORD
;
PTM = 0D000H ;TIMER DATA PORT
MPTA = PTM+4 ;MASTER PIC PORT
MPTB = PTM+6 ;MASTER PIC PORT A=1
SA1A = PTM+8 ;SLAVE 1 PIC PORT
SA1B = PTM+0AH ;SLAVE 1 PIC PORT A=1
SA2A = PTM+0CH ;SLAVE 2 PIC PORT
SA2B = PTM+0EH ;SLAVE 2 PIC PORT A=1
;
TRMDE = 5 ;SET IF STEP MODE PERMITTED
STPFLG = 6 ;SET IF IN STEP MODE
;
M3 = 7 ;VARIOUS MASKS
M4 = 0FH
M5 = 1FH
M7 = 7FH
M8 = 0FFH
MU4 = 0F000H
MU8 = 0FF00H
MU12 = 0FFF0H
MU13 = 0FFF8H
MU15 = 0FFFEH
;
LDA MACRO DST,SRC
DW 4D05H ;LD DA,IM
DW DST ;DA
DW SRC ;IM
ENDM
;
PROCMTR:DW 0
DW SYMDE
DW INIT
;
CHTAB: DB ' ' ; SPACE
NIMS: DB ' NI='
BSPMS: DB BSP,' ',BSP
FCWL: DB 'XSXVNXXXCZSPDH'
PCMS: DB 'NXT PC='
BPCMS: DB 'BRK PC='
CNMSG: DB '#',CR,LF
PRMSG: DB '*',CR,LF
ERMSG: DB '?',CR,LF
;
SIGNON: DB CR,LF
DB 'PROC 070 MONITOR V 2,0'
DB CR,LF
;
SIGNONL = ^$-^SIGNON
;
SPECM: DB 'SPEC. OPCODE',CR,LF
SPECML = ^$-^SPECM
PRIVM: DB 'PRIV. INSTR.',CR,LF
PRIVML = ^$-^PRIVM
NONVM: DB 'NON VECT. INT.',CR,LF
NONVML = ^$-^NONVM
VEC3M: DB 'VECT.3',CR,LF
VEC3ML = ^$-^VEC3M
;
CMDLST: DB 'BCDEFGHMNOPRSIVXZ',CR,0
RORG LO($) & 1
CMDADD: DW SETBRK ;SET BREAKPOINTS AND GO
DW SETCRY ;SET CARRY FLAG
DW SETDAJ ;SET DEC ADJUST FLAG OR DISP MEMORY
DW EXBRK ;SET HARDWARE BREAKPOINT
DW FILMEM ;FILL MEMORY
DW XECTE ;GO TO PC OR SPECIFIED ADDRESS
DW SETHLF ;SET HALF CARRY FLAG
DW MOVE ;MOVE MEMORY
DW UMODE ;SET USER NORMAL MODE
DW OUTPORT ;EXECUTE OUTPUT COMMAND
DW SETPAR ;SET PARITY FLAG OR PC ADDRESS
DW SETREG ;SET REGISTER CONTENT
DW SETSGN ;SET SIGN FLAG OR SUBSTITUTE MEMORY
DW IOPORT ;EXECUTE INPUT COMMAND
DW SETOVF ;SET OVERFLOW FLAG
DW DISREG ;DISPLAY REGISTERS
DW SETZRO ;SET ZERO FLAG
DW STEP ;EXECUTE STEP MODE
;
;DMSGL = ^$-^DMSG ; TODO
USERM: DB 'PROGRAM ERROR',CR,LF
USERML = ^$-^USERM
;
RORG LO($) & 1
;
STAREA: DW SYMDE
DW SPEC ;SPECIAL OPCODE
DW SYMDE
DW PRIV ;PRIV. INSTRUCTION
DW SYMDE
DW SYSCAL ;SYSTEM CALL
DW SYMDE
DW USERR
DW SYMDE
DW STPRTN ;NON MASK. INT.
DW SYMDE
DW NONV ;NON VECT INT.
DW SYMDE
DW CLOCK ;VECTORED INT.
DW VEC1
DW VEC2
DW VEC3 ;CLOCK INT
;
USEXT: DB 'PROGRAM EXIT'
USEXTL = ^$-^USEXT
;
VEC1M: DB 'VECT.1',CR,LF
VEC1ML = ^$-^VEC1M
;
VEC2M: DB 'VECT.2',CR,LF
VEC2ML = ^$-^VEC2M
;
RORG LO($) & 1
;
INIT: LD R1,^STAREA ;MOVE NPASP IN RAM
LD R3,^NPSAREA
LD R2,0010H
LDIR R3^,R1^,R2
LD R0,^NPSAREA-4
LDCTL PSAPOFF,R0
SOUT 0FF00H,R0 ;SELECT BANK 0
CLR BANKSW ;CLEAR BNKSW. REG
CLR HWBRK ;CLEAR HWBRK REG.
;
; INIT. PCMI 070
;
LD R0,TMD2
OUT TPT+6,R0 ;MODE TIMER 2
LD R0,TMD1
OUT TPT+6,R0 ;MODE TIMER 1
LD R0,TMD0
OUT TPT+6,R0 ;MODE TIMER 0
LD R1,RT96
OUT TPT,R1 ;TIMER 0 LSB (CRT PORT)
EXB RH1,RL1
OUT TPT,R1 ;TIMER 0 MSB
LD R1,RT96
OUT TPT+4,R1 ;TIMER 2 LSB (AUX PORT)
EXB RH1,RL1
OUT TPT+4,R1 ;TIMER 2 MSB
LD R1,RT96
OUT TPT+2,R1 ;TIMER 1 LSB (TTY PORT)
EXB RH1,RL1
OUT TPT+2,R1 ;TIMER 1 MSB
;
LD R4,^ENDBUFA-^SRCBUFA
LD R2,^SRCBUFA
LD R1,CPT+2 ;INIT SIO #1 CH A : CONSOLE
OTIRB R1,R2^,R4
;
LD R4,^ENDBUFB-^SRCBUFB
LD R2,^SRCBUFB
LD R1,SPT+2 ;INIT SIO #1 CH B : TTY
OTIRB R1,R2^,R4
;
LD R4,^ENDBUFA-^SRCBUFA
LD R2,^SRCBUFA
LD R1,CPT+10 ;INIT SIO #2 CH A : AUX 1
OTIRB R1,R2^,R4
;
LD R4,^ENDBUFB-^SRCBUFB
LD R2,^SRCBUFB
LD R1,CPT+14 ;INIT SIO #2 CH B : AUX 2
OTIRB R1,R2^,R4
;
; INIT. PTIM 070
;
LD R0,0FFFFH ;MASTER RESET
OUT PTM+2,R0
LD R0,0FFEFH ;16 BIT MODE
OUT PTM+2,R0
LD R0,0FF17H ;MASTER MODE REGISTER
OUT PTM+2,R0
LD R0,6CE1H ;MM SETTING 50HZ CLOCK
OUT PTM,R0
;
LD R0,0FF03H ;DATA PNT CNT 3
OUT PTM+2,R0
LD R0,0B22H ;SQUARE WAVE
OUT PTM,R0
;
LD R0,0FF04H ;DATA PNT CNT 4
OUT PTM+2,R0
LD R0,0B22H ;SQUARE WAVE
OUT PTM,R0
;
LD R0,0FF05H ;DATA PNT CNT 5
OUT PTM+2,R0
LD R0,0E21H ;PULS
OUT PTM,R0
;
LD R0,0FF0BH ;DATA PNT CNT 3
OUT PTM+2,R0
LD R0,0008H ;LOAD REG
OUT PTM,R0
;
LD R0,0FF0CH ;DATA PNT CNT 4
OUT PTM+2,R0
LD R0,0010H ;LOAD REG
OUT PTM,R0
;
LD R0,0FF0DH ;DATA PNT CNT 5
OUT PTM+2,R0
LD R0,0258H ;LOAD REG
OUT PTM,R0
;
LD R0,0FF7CH ;LOAD AND ARM
OUT PTM+2,R0
;
; MASTER
;
LD R0,0011H ;ICW 1
OUT MPTA,R0
LD R0,0000H ;ICW 2
OUT MPTB,R0
LD R0,00C0H ;S7,S6 SLAVE
OUT MPTB,R0
LD R0,0017H ;ICW 4
OUT MPTB,R0
LD R0,0002H
OUT MPTB,R0 ;OCW 1
OUT MPTA,R0 ;EN INT
;
; SLAVE #1
;
LD R0,0011H ;ICW 1
OUT SA1A,R0
LD R0,0010H ;ICW 2
OUT SA1B,R0
LD R0,0006H ;ICW 3
OUT SA1B,R0
LD R0,0013H ;ICW 4
OUT SA1B,R0
LD R0,0000H
OUT SA1B,R0 ;OCW 1
OUT SA1A,R0 ;EN INT
;
; SLAVE #2
;
LD R0,0011H ;ICW 1
OUT SA2A,R0
LD R0,0020H ;ICW 2
OUT SA2B,R0
LD R0,0007H ;ICW 3
OUT SA2B,R0
LD R0,0013H ;ICW 4
OUT SA2B,R0
LD R0,0000H ;OCW 1
OUT SA2B,R0 ;EN INT
OUT SA2A,R0
;
; MOVE MONITOR IN SAME RAM SPACE
; AND DISABLE PROM.
;
LD R1,0
LD R3,0
LD R2,0800H
LDIR R3^,R1^,R2
MSET
;
CLR CTLWD
SETUPC: LD USPC,USERP ;SET DEFAULT USER PC
CLR USFCW ;SET DEFAULT USER FCW
LD R15,^STACK ;SET MONITOR STACK
LD R0,^USRSTK ;SET DEFAULT USER STACK
LD R14,^SIGNON
LD R13,SIGNONL
CALR RESET_RECVE_SWITCH
LD U15,R0
JR DISER
PROMPT: LD R14,^PRMSG
DISERA: LD R13,3
DISER: CALR CONOUT ;PROMPT
RDKBD: CALR CONIN ;GET COMMAND(KEYBD ADDRESS IN R14)
PRKBD: LD R2,' '
LD R3,R2 ;CLEAR ASSEMBLY
CALR GETCH
CP R0,ESC
JR NZ,TESTCR
CALR GETCH
TESTCR: CP R0,CR
JR ZR,DECPOS ;END ON CR
LD R1,R3
AND R1,M8
SRLL RR2,8
SLL R0,8
OR R2,R0
CALR NEXCH ;NEXT CHARACTER
CP R0,' '
JR NZ,TESTCR
DECPOS: DEC R14,1
CPL RR2,'MSA '-32
JP ZR,XASM ;ASSEMBLER REQUEST
CPL RR2,'KNAB' ;SELECT BANK
JP ZR,BANK ;SWITCH BANK
CPL RR2,'TMEM'
JP ZR,MEMTST
CPL RR2,'EMIT' ;TIME
JP ZR,ITIME
CPL RR2,'PMUD' ;DUMP
JP ZR,DUMP
CPL RR2,'DAOL' ;LOAD
JP ZR,LOAD
CPL RR2,'1XUA' ;AUX1
JP ZR,AUX1
CPL RR2,'2XUA' ;AUX2
JP ZR,AUX2
RESKBD: LD R14,^KEYBD
CALR GETCH ;CHECK SINGLE LETTER COMMANDS
CP R0,ESC
JR NZ,SAVPOS
CALR GETCH
SAVPOS: PUSH R15^,R14
LD R14,^ CMDLST
LD R1,^CMDADD(-2)
LD R2,R0
CMDTLP: INC R1,2
CALR NEXCH
TEST R0
JR ZR,CMDPOP
CP R0,R2
JR NZ,CMDTLP
POP R14,R15^
LD R2,R1^
JP R2^ ;EXECUTE SINGLE LETTER COMMAND
CMDPOP: POP R14,R15^
CMDER: LD R14,^ERMSG
JR DISERA ;PUT QUESTION PROMPT
;
; SET BREAKPOINT(1-3) AND EXECUTE - B COMMAND
;
SETBRK: CLR R11
CLR R12
SETBA: CALR HEX_TST ;FETCH BREAKPOINT ADDRESS
LD R13,R12
LD R12,R11
RES R1,0
LD R11,R1
CP R0,CR
JR ZR,SETBB
TEST R13
JR NZ,CMDER
JR SETBA
SETBB: LD R0,3
LD R1,^BRKTAB
SETBC: LD R1^,R11 ;SAVE ADDRESS
INC R1,2
TEST R11
JR ZR,SETBD
LD R2,R11^
LD R1^,R2 ;SAVE CONTENT
LD R11^,7FFFH ;STUFF SYSTEM CALL
SETBD: INC R1,2
LD R11,R12
LD R12,R13
DBJNZ RL0,SETBC ;LOOP FOR 3 BREAKPOINTS
SET CTLWD,TRMDE
SETBE: CALR RESTR ;RESTORE USER REGISTERS
IRET
;
; SET HARDWARE BREAKPOINT - E COMMAND
;
EXBRK: CALR HEX_TST
PUSH R15^,R1
CALR COMMA
JP NZ,CMDERR
CALR HEX_TST
CALR CR_CHK
OUT BKP+2,R1
POP R1,R15^
EXBRK1: OUT BKP,R1
LD HWBRK,R1
SET CTLWD,STPFLG
JR SETFCB
;
; SET CARRY FLAG(OR CLEAR) - C COMMAND
;
SETCRY: LD R2,7
SETFCW: CALR GETBIT
JR NZ,CMDER
SETFCA: LD R0,1
SDL R0,R2
COM R0
SDL R1,R2
LD R2,USFCW
AND R2,R0
OR R2,R1
LD USFCW,R2
SETFCB: JP PROMPT
;
; SET DECIMAL ADJUST(OR CLEAR) - D COMMAND
;
SETDAJ: PUSH R15^,R14
CALR GETBIT
POP R14,R15^
LD R2,3
JR ZR,SETFCA
;
; DISPLAY MEMORY WORDS IN HEX AND ASCII -D COMMAND
;
CALR HEX_TST ;FETCH FROM ADDRESS
LD R12,R1
RES R12,0
LD R13,R12
CP R0,CR
JR ZR,DISMED ;NO END ADDRESS
CALR HEX_TST ;FETCH TO ADDRESS
LD R13,R1
RES R13,0
CALR CR_CHK
CP R12,R13
JR LGT,CMDER ;FROM > TO
DISMED: INC R13,2 ;SET LWA+1
DISMEA: LD R10,R13
SUB R10,R12
LD R11,16
JR NZ,DISMEB
JR SETFCB
DISMEB: CP R10,R11
JR NC,DISMEC
LD R11,R10
DISMEC: LD R10,R11
LD R14,R12
LD R8,^KEYBD
LD R1,R14
CALR PUTH4 ;ADDRESS TO OUTPUT AREA
LD R1,4
CALR PUTSP ;4 SPACES AFTER ADDRESS
DISMEE: LD R1,R12^
INC R12,2
CALR PUTH4 ;HEX DATA TO OUTPUT AREA
LD R0,' '
CALR PUTCH
DEC R10,2
JR NZ,DISMEE
DISMEF: CALR NEXCH
CP R0,' '
JR CY,DISMEG
CP R0,DEL
JR CY,DISMEH
DISMEG: LD R0,'_'
DISMEH: CALR PUTCH ;ASCII DATA TO OUTPUT AREA
DEC R11,1
JR NZ,DISMEF
CALR CRLF
PUSH R15^,R13
PUSH R15^,R14
LD R14,^KEYBD
LD R13,R8
SUB R13,R14
CALR CONOUT ;DISPLAY DATA LINE
POP R12,R15^
POP R13,R15^
CALR BREAK ;BACK TO MONITOR ?
JP ZR,GOPRM ;YES
JR DISMEA ;LOOP FOR MORE LINES
;
; FILL MEMORY - F COMMAND
;
FILMEM: CALR HEX_TST ;FETCH FIRST (OR ONLY) ADDRESS
LD R12,R1
RES R12,0
LD R13,R12
CALR COMMA
JR NZ,CMDERR
CALR HEX_TST ;FETCH SECOND ADDRESS (OR VALUE)
CP R0,CR
JR ZR,FILMA ;ONLY ONE ADDRESS
LD R13,R1
RES R13,0
CP R12,R13
JR LGT,CMDERR ;FROM > TO
CALR HEX_TST ;FETCH VALUE
CALR CR_CHK
FILMA: LD R12^,R1 ;DO FILL
INC R12,2
CP R12,R13
JR LLE,FILMA ;LOOP TO END
JR GOPRM
;
; SET HALF CARRY FLAG(OR CLEAR) - H COMMAND
;
SETHLF: LD R2,2
SETHLA: JR SETFCW
;
; MOVE MEMORY - M COMMAND
;
MOVE: CALR HEX_TST;FETCH FROM ADDRESS
LD R12,R1
RES R12,0
CALR COMMA
JR NZ,CMDERR
CALR HEX_TST ;FETCH THROUGH ADDRESS
LD R13,R1
RES R13,0
CALR COMMA
JR NZ,CMDERR
CALR HEX_TST ;FETCH TO ADDRESS
CALR CR_CHK
CP R12,R13
JR LGT,CMDERR
LD R2,R13
SUB R2,R12
CP R1,R12
JR LGT,MOVEA
INC R2,2
SRL R2,1
LDIR R1^,R12^,R2
JR GOPRM
MOVEA: ADD R1,R2
INC R2,2
SRL R2,1
LDDR R1^,R13^,R2
JR GOPRM
;
; SET USER NORMAL MODE - NM COMMAND
;
UMODE: CALR GETCH
CP R0,'M'
JR ZR,NOMO
;
; SET NVECT.INT. (OR CLEAR) - N COMMAND
;
CP R0,'1'
JR ZR,NVECT
CP R0,'0'
JR NZ,CMDERR
NVECT: LD R2,11
CALR GETBIT1
JR NZ,CMDERR
JP SETFCA
NOMO: CLR R3
JR SETMDE
;
; SET PARITY/OVERFLOW FLAG(OR CLEAR) - P COMMAND
;
SETPAR: PUSH R15^,R14
CALR GETBIT
POP R14,R15^
LD R2,4
SETPAA: JP ZR,SETFCA
;
; SET USER PC ADDRESS - P COMMAND
;
CALR GETCH
CP R0,'='
JR NZ,CMDERR
CALR HEX_TST
CALR CR_CHK
LD USPC,R1
JR GOPRM
;
; SET REGISTER CONTENT - R COMMAND
;
SETREG: PUSH R15^,R14
CALR GETCH
CLR R13
CP R0,'L'
JR ZR,SETBRG ;LOWER BYTE REGISTER
SET R13,3
CP R0,'H'
JR ZR,SETBRG ;UPPER BYTE REGISTER
POP R14,R15^
CALR REGVAL
JR ZR,SETREA
CMDERR: JP CMDER
REGVAL: CALR DEC4
RET NZ
CP R0,'='
RET NZ
LD R12,R1
ADD R12,R12
CALR HEX16
RET NZ
CP R0,CR
RET
SETBRG: POP R1,R15^
CALR REGVAL
JR NZ,CMDERR
LD R0,R12
AND R0,MU12
JR NZ,CMDERR
LD R2,R1
AND R1,MU8
JR NZ,CMDERR
LD R1,U0(R12)
SDL R2,R13
LD R0,M8
SDL R0,R13
COM R0
AND R1,R0
OR R1,R2
SETREA: LD U0(R12),R1
GOPRM: JP PROMPT
;
; SET SIGN FLAG(OR CLEAR) - S COMMAND
;
SETSGN: PUSH R15^,R14
CALR GETBIT
POP R14,R15^
LD R2,5
JP ZR,SETFCA
;
; SET USER SYSTEM MODE - SM COMMAND
;
CALR GETCH
CP R0,'M'
JR NZ,SUBST
LD R3,4000H
SETMDE: CALR GETCH
JR NZ,CMDERR
LD USFCW,R3
JR GOPRM
;
; SUBSTITUTE MEMORY - S COMMAND
;
SUBST: DEC R14,1
CALR HEX_TST ;FETCH SUBSTITUTE ADDRESS
CALR CR_CHK
LD R13,R1
RES R13,0
SUBSTA: LD R8,^KEYBD
LD R1,R13
CALR PUTH4 ;ADRESS TO OUTPUT AREA
LD R0,' '
CALR PUTCH ;SPACE AFTER ADDRESS
LD R1,R13^
CALR PUTH4 ;CONTENT TO OUTPUT AREA
LD R0,'-'
CALR PUTCH ;HYPHEN PROMPT
PUSH R15^,R13
LD R14,^KEYBD
LD R13,10
CALR CONOUT ;DISPLAY LINE
CALR CONIN ;FETCH RESPONSE
POP R13,R15^
CALR GETCH
JR ZR,SUBSTB ;CR ONLY IS ADVANCE
CP R0,'.'
JP ZR,PROMPT ;PERIOD IS TERMINATE
DEC R14,1
CALR HEX16 ;GET SUBSTITUTE VALUE
JR NZ,SUBSTA ;IGNORE ERRORS
CP R0,CR
JR NZ,SUBSTA
LD R13^,R1 ;DO SUBSTITUTION
SUBSTB: INC R13,2
JR SUBSTA
;
; EXECUTE INPUT - I COMMAND
;
IOPORT: CALR HEX_TST
CALR CR_CHK
LD R13,R1
IOPORT1:LD R8,^KEYBD
LD R1,R13
CALR PUTH4
LD R0,' '
CALR PUTCH
IN R1,R13
CALR PUTH4
PUSH R15^,R13
LD R14,^KEYBD
LD R13,9
CALR CONOUT
CALR CONIN
POP R13,R15^
CALR GETCH
JR ZR,IOPORT2
CP R0,'.'
JR ZR,GOPRM
JR IOPORT1
IOPORT2:INC R13,1
JR IOPORT1
;
; EXECUTE OUTPUT - O COMMAND
;
OUTPORT:CALR HEX_TST
CALR CR_CHK
LD R13,R1
OUT1: LD R8,^KEYBD
LD R1,R13
CALR PUTH4
LD R0,'-'
CALR PUTCH
PUSH R15^,R13
LD R14,^KEYBD
LD R13,5
CALR CONOUT
CALR CONIN
POP R13,R15^
CALR GETCH
JR ZR,OUT2
CP R0,'.'
JR ZR,GOPRM
DEC R14,1
CALR HEX16
JR NZ,OUT1
CP R0,CR
JR NZ,OUT1
OUT R13,R1
OUT2: INC R13,1
JR OUT1
;
; SET VECT. INT. ENABLE (OR CLEAR) - V COMMAND
;
SETOVF: LD R2,12
JP SETFCW
;
; DISPLAY REGISTERS - X COMMAND
;
DISREG: LD R8,^KEYBD
CALR GETCH
JR NZ,DISPRG ;NOT GENERAL CASE
LD R13,^U0
CLR R12
CALR PUTPC ;PC=XXXX
LD R1,3
DISRA: CALR PUTSP
CALR PUTRG ;REGISTERS 0-7
INC R13,2
LD R1,1
INC R12,1
CP R12,8
JR NZ,DISRA
CALR CRLF
PUSHL R15^,RR12
LD R14,^KEYBD
LD R13,79
CALR CONOUT
POPL RR12,R15^
LD R8,^KEYBD
LD R1,14
DISRB: CALR PUTSP
CALR PUTRG ;REGISTERS 8-15
INC R13,2
LD R1,1
INC R12,1
CP R12,16
JR NZ,DISRB
LD R13,79
DISRC: CALR CRLF
LD R14,^KEYBD
CALR CONOUT
DISRE: LD R8,^KEYBD
CALR PUTFL1
LD R13,10H
CALR CRLF
LD R14,^KEYBD
CALR CONOUT
LD R8,^KEYBD
CALR PUTFL2
LD R13,10H
DISRF: CALR CRLF
LD R14,^KEYBD
CALR CONOUT
DISRD: JP SETFCB
DISPRG: CP R0,'P'
JR NZ,DISFLG
CALR GETCH ;HANDLE P REGISTER
JP NZ,CMDER
CALR BRKDIS ;PC=XXXX
JR DISRD
DISFLG: CP R0,'F'
JR NZ,DISNRG
CALR GETCH ;HANDLE FLAG REGISTER
JP NZ,CMDRE
CALR PUTFL1
JR DISRE
DISNRG: DEC R14,1 ;DO SPECIFIC REGISTER
CALR DEC4
JP NZ,CMDRE
CALR CR_CHK
LD R12,R1
LD R13,^U0(R1)
ADD R13,R1
CALR PUTRG
LD R13,9
JR DISRC
;
; SET ZERO FLAG(OR CLEAR) - Z COMMAND
;
SETZRO: LD R2,6
JP SETFCW
;
; GO COMMAND
;
XECTE: RES CTLWD,TRMDE
CALR GETCH
JR ZR,SETBEE ;NO ADDRESS
DEC R14,1
CALR HEX_TST ;FETCH PC ADDRESS
CALR CR_CHK
LD USPC,R1
SETBEE: JP SETBE
;
; ASM COMMAND
;
XASM: RES CTLWD,TRMDE
LD USPC,USERP
LD USFCW,SYMDE
JR SETBEE
;
; RAMTEST
;
MEMTST: CALR HEX_TST
LD R11,R1 ;START ADDR. IN R11
RES R11,0
CALR COMMA
JP NZ,CMDERR
CALR HEX_TST
CALR CR_CHK
LD R12,R1 ;END ADDR. IN R12
RES R12,0
CP R11,R12
JP LGT,CMDERR ;R11>R12,THEN ERROR
LD R3,0000H
CALR DISPL
LD R10,R11 ;START ADDR. IN R10
LD R9,0
VUNU: LD R10^,R9
CP R10,R12
JR ZR,VEVO
INC R10,2
JR VUNU
VEVO: LD R6,R9
INC R9,1
;
CONT: CALR BREAK ;BACK TO MONITOR ?
JP ZR,PROMPT ;YES
CALR BEGREG
INC R3,1
CALR DISPL
LD R10,R11 ;START ADDR IN R10
VOLG: LD R7,R10^
CP R6,R7 ;PRIVIOUS DATA CORRECT ?
JR ZR,NOERR ;YES
CALR BREAK ;BACK TO MONITOR ?
JP ZR,PROMPT ;YES
CALR ERROR
NOERR: LD R10^,R9
CP R10,R12
JR ZR,ENDADR
INC R10,2
JR VOLG
ENDADR: LD R6,R9
RL R9,1
JR NC,CONT
CP R9,0FFFFH
JR ZR,RCM30
RCM25: RLC R9,1
JR CY,RCM25
JR CONT
RCM30: LD R6,R9
LD R9,1
JR CONT
;
BREAK: CLRB RL0
INB RL0,CPT
CPB RL0,'S'
RET NZ
BREAK1: INB RL0,CPT
CPB RL0,ESC
RET ZR
CPB RL0,'C'
JR NZ,BREAK1
RESFLG ZR
RET
;
BEGREG: LD R14,^SIGNON
LD R13,1
CALR CONOUT
RET
;
NREG: LD R14,^SIGNON
LD R13,2
CALR CONOUT
RET
;
ERROR: LD R8,^KEYBD ;R8=BUFFER POINTER
LD R14,R8
LD R1,R10
CALR PUTH4 ;R10 IN BUFFER
LD R1,4
CALR PUTSP ;4 SPACES IN BUFFER
LD R1,R7
CALR PUTH4 ;R7 IN BUFFER
LD R1,4
CALR PUTSP ;4 SPACES IN BUFFER
LD R1,R6
CALR PUTH4 ;R6 IN BUFFER
CALR CRLF
LD R13,22 ;22 CHARACTERS
CALR CONOUT
RET
;
DISPL: LD R8,^KEYBD
LD R14,R8
LD R1,R3
CALR PUTH4
LD R13,4
CALR CONOUT
RET
;
CR_CHK:
CP R0,CR
RET EQ
POP R2,R15^
CMDRE:
CALR RESET_RECVE_SWITCH
JP CMDER
;
DISERG:
CALR RESET_RECVE_SWITCH
CALR CONOUT
JP SETFCB
;
; INPUT TIME - TIME COMMAND.
;
ITIME: CALR HEX_TST ;FETCH HOURS,MINUTES
LD R12,R1
LD R13,R12
JP NZ,CMDERR
CALR CR_CHK ;R12 = HOURS,MINUTES
;
LD R0,0FF01H ;DATA PNT CNT 1
OUT PTM+2,R0
LD R0,1139H ;MODE
OUT PTM,R0
;
LD R0,0FF02H ;DATA PNT CNT 2
OUT PTM+2,R0
LD R0,0039H ;MODE
OUT PTM,R0
;
LD R0,0FF09H ;CLEAR COUNTER 1
OUT PTM+2,R0
LD R0,0
OUT PTM,R0
;
LD R0,0FF0AH ;CLEAR COUNTER 2
OUT PTM+2,R0
LD R0,0
OUT PTM,R0
;
LD R0,0FF43H ;LOAD
OUT PTM+2,R0 ;COUNTERS 1 AND 2
;
LD R0,0FF09H ;DATA PNT CNT 1
OUT PTM+2,R0 ;LOAD
LD R0,0 ;CLEAR SECONDS
OUT PTM,R0
LD R0,0FF0AH ;DATA PNT CNT 1
OUT PTM+2,R0 ;LOAD
OUT PTM,R12 ;LOAD HOURS AND MINUTES
LD R0,0FF43H ;LOAD CNT 1 AND 2
OUT PTM+2,R0
;
LD R0,0FF09H ;CLEAR COUNTER 1
OUT PTM+2,R0
LD R0,0
OUT PTM,R0
;
LD R0,0FF0AH ;CLEAR COUNTER 2
OUT PTM+2,R0
LD R0,0
OUT PTM,R0
;
LD R0,0FF23H ;ARM COUNTER 1 AND 2
OUT PTM+2,R0
EI VI ;ENABLE VECT. INT.
JP PROMPT
;
; DUMP MEMORY ON TTY IN MOTOROLA FORMAT
;
DUMP: CALR HEX_TST
LD R10,R1 ;START ADDRESS IN R10
CALR COMMA
JP NZ,CMDERR
CALR HEX_TST
LD R11,R1 ;END ADDRESS IN R11
DUMP10: LD R4,R11
SUB R4,R10
CP R4,10H
JR CY,DUMP20
LD R4,0FH
DUMP20: ADD R4,4
LD R5,R4
SUB R5,3
LDB RL0,CR
CALR TRNCHE
LDB RL0,LF
CALR TRNCHE
LDB RL0,'S'
CALR TRNCHE
LDB RL0,'1'
CALR TRNCHE
CLRB RL6
LDB RL0,RL4
CALR DUMP40
LD R1,R10
LDB RL0,RH1
CALR DUMP40
LDB RL0,RL1
CALR DUMP40
DUMP30: LDB RL0,R10^
CALR DUMP40
INC R10,1
DEC R5,1
JR NZ,DUMP30
COMB RL6
LDB RL0,RL6
CALR DUMP40
CP R10,R11
JR CY,DUMP10 ;NEXT RECORD
LDB RL0,CR
CALR TRNCHE
LDB RL0,LF
CALR TRNCHE
LDB RL0,'S'
CALR TRNCHE
LDB RL0,'9'
CALR TRNCHE
LDB RL0,CR
CALR TRNCHE
LDB RL0,LF
CALR TRNCHE
JP PROMPT
;
;
DUMP40: ADDB RL6,RL0
LDB RL7,RL0
RRB RL0,2
RRB RL0,2
CALR DUMP50
LDB RL0,RL7
DUMP50: ANDB RL0,0FH
ADDB RL0,'0'
CPB RL0,'9'
JR LLE,DUMP60
ADDB RL0,07H
DUMP60: CALR TRNCHE
RET
;
; LOAD FROM TTY IN MOTOROLA FORMAT
;
LOAD: CALR RECHB ;INPUT CHARACTER
CPB RL0,'S'
JR NZ,LOAD
CALR RECHB
CPB RL0,'9'
JR NZ,LOAD00
JP PROMPT ;LAST CHARACTER
;
LOAD00: CPB RL0,'1'
JR NZ,LOAD
LOAD10: CLRB RL6
CALR LOAD50 ;INPUT BYTE COUNT
DECB RL0,2 ;DEC. BYTE COUNT
LDB RH6,RL0
CALR LOAD40
LOAD20: CALR LOAD50
DECB RH6,1
JR ZR,LOAD30 ;INPUT BYTE
LDB R7^,RL0
INC R7,1
JR LOAD20
LOAD30: INCB RL6,1
JR ZR,LOAD
JP CMDERR
;
LOAD40: CALR LOAD50
LDB RH7,RL0
CALR LOAD50
LDB RL7,RL0 ;START ADDRESS IN R7
RET
;
LOAD50: CALR RECHB ;INPUT 2 ASCII CHARACTERS
CALR LOAD60
LDB RH3,RL0
CALR RECHB
CALR LOAD60
RLB RH3,2
RLB RH3,2
ADDB RL0,RH3
ADDB RL6,RL0 ;2 HEX CHARACTERS IN RL6
RET
;
LOAD60: CPB RL0,'0' ;CONVERT ASCII TO HEX NIBBLE
JP CY,CMDERR
CPB RL0,3AH
JR CY,LOAD70
CPB RL0,41H
JP CY,CMDERR
CPB RL0,46H
JP LGT,CMDERR
SUBB RL0,07H
LOAD70: ANDB RL0,0FH
RET
;
; USER PROGRAM ILLEGAL TRAP
;
USERR: CALR SAVER ;SAVE USER REGISTERS
RES CTLWD,STPFLG ;CLEAR STEP CONTROL
LD R14,^USERM
LD R13,USERML
JP DISERG
SPEC: CALR SAVER
RES CTLWD,STPFLG
LD R14,^SPECM
LD R13,SPECML
JP DISERG
PRIV: CALR SAVER
RES CTLWD,STPFLG
LD R14,^PRIVM
LD R13,PRIVML
JP DISERG
NONV: CALR SAVER
RES CTLWD,STPFLG
LD R14,^NONVM
LD R13,NONVML
JP DISERG
VEC3: CALR SAVER
RES CTLWD,STPFLG
LD R14,^VEC3M
LD R13,VEC3ML
JP DISERG
;
VEC1: CALR SAVER
RES CTLWD,STPFLG
LD R14,^VEC1M
LD R13,VEC1ML
JP DISERG
;
VEC2: CALR SAVER
RES CTLWD,STPFLG
LD R14,^VEC2M
LD R13,VEC2ML
JP DISERG
;
; BANK SWITCH
;
BANK: LD R13,BANKSW
AND R13,7
LD R8,^KEYBD
LD R1,R13
CALL PUTH4
LD R0,'-'
CALL PUTCH
PUSH R15^,R13
LD R14,^KEYBD+3
LD R13,2
CALR CONOUT
CALR CONIN
POP R13,R15^
CALR GETCH
JR ZR,BANK1
DEC R14,1
CALR HEX16
JP NZ,CMDERR
CP R0,CR
JR NZ,BANK1
CP R1,8
JP PL,CMDERR
OR R1,BNKMSK
LD R0,1
SOUTD R1^,R2^,R0
LD BANKSW,R1
BANK1: JP PROMPT
;
; NON MASK. INTERUPT
;
STPRTN: CALR SAVER ;SAVE USER REGISTERS
BIT CTLWD,STPFLG
LD R4,USPC
OUT BKP,R4
CALR BRKDIS1
LD HWBRK,R4
STPRTB: RES CTLWD,STPFLG
CALR BRKDIS
SET CTLWD,STPFLG
JP RDKBD
;
; STEP COMMAND(CR ONLY IF CONDITION SET)
;
STEP: BIT CTLWD,STPFLG
JP ZR,CMDER
JP SETBE
;
; USER PROGRAM CALL
;
SYSCAL: CALR SAVER ;SAVE USER REGISTERS
AND R2,M8
JR ZR,PROCAL ;SERVICE REQUEST
CP R2,M8
JR NZ,UEXIT ;NOT BREAKPOINT TRAP
LD R0,3
LD R4,^BRKTAB
LD R3,USPC
DEC R3,2 ;BACK PC TO TRAP ADDRESS
CHKBRK: TEST R4
JR ZR,UEXIT
CP R3,R4^
JR ZR,BRKHIT ;MATCH ON SET BREAKPOINT
INC R4,4
DEC R0,1
JR NZ,CHKBRK
UEXIT: CALR CLRBRK ;CLEAR BREAKPOINT TABLE
RES CTLWD,STPFLG
LD R8,^KEYBD
PUSH R15^,R2
LD R1,USEXTL
LD R2,^USEXT
CALR PUTMS
POP R1,R15^
SLA R1,8
CALR PUTHXB
LD R13,USEXTL+4
JP DISRF
BRKHIT: LD USPC,R3 ;SET USER PC TO TRAP LOCATION
CALR CLRBRK ;AND CLEAR BREAKPOINT TABLE
JR STPRTB
CLRBRK: LD R0,3 ;CLEAR BREAKPOINT TABLE(IN REVERSE)
LD R4,^BRKTAB(8)
CLRBA: LD R5,R4^
CLR R4^
INC R4,2
TEST R5
JR ZR,CLRBB
LD R6,R4^
CLR R4^
LD R5^,R6 ;RESTORE BREAKPOINT CONTENT
CLRBB: DEC R4,6
DEC R0,1
JR NZ,CLRBA
RET
;
; PROCESS A USER PROGRAM REQUEST
;
PROCAL: LDM R3,R1^,4 ;FETCH PARAMETER LIST
SRA R3,8
AND R3,M8
CP R3,1
JR CY,PROCAA
JR NZ,PROCAE
CALR CONIN ;RETURN KEYBOARD REQUEST
CALR GETCH
CP R0,ESC
JP ZR,PRKBD ;ESCAPE IS MONITOR RETURN
PROCAA: LD R1,U1
LD R14,^KEYBD
LDM R3,R1^,4
LD R8,R5
LD R7,R6
CLR R6
PROCAB: SUB R7,1
JR CY,PROCAC ;PREMATURE END
CALR NEXCH
LD R9,R0
CALR PUTCH
INC R6,1
CP R9,CR
JR NZ,PROCAB
CLR R7 ;NORMAL END
PROCAC: NEG R7
PROCAD: AND R3,MU8
OR R3,R7
LD R1,U1
LDM R1^,R3,4 ;RESTORE USER PARAMETERS
JP SETBE
PROCAE: CP R3,3
LD R13,R6 ;OUTPUT CONSOLE REQUEST
JR NC,PROCAG
LD R14,R5
CALR CONOUT
CLR R7
PROCAF: LD R1,U1
LDM R3,R1^,4
JR PROCAD
PROCAG: LD R14,R4
CLR R4
JR ZR,PROCAC
LD R4,R14
CP R3,7
JR NC,PROCAC
CLR R13
PROCAH: JP PROCAC
;
; TRANSMIT CHARACTER IN R0
;
TRNCHE: IN R2,SPT+2
BIT R2,2
JR ZR,TRNCHE ;WAIT SERIAL READY
OUT SPT,R0
RET
;
; RECEIVE CHARACTER TO R0
;
RECHB: IN R0,SPT+2
BITB RL0,0H
JR ZR,RECHB
IN R0,SPT
RECHF: ANDB RL0,M8
CLRB RH0
RES R0,7
RET
;
; TTY OUTPUT GOES TO AUX1
;
AUX1: LD R4,2
LD R5,10
LD TRNCHE(R4),CPT+10
LD TRNCHE(R5),CPT+8
LD RECHB(R4),CPT+10
LD RECHB(R5),CPT+8
PRPT: JP PROMPT
;
; TTY OUTPUT GOES TO AUX2
;
AUX2: LD R4,2
LD R5,10
LD TRNCHE(R4),CPT+14
LD TRNCHE(R5),CPT+12
LD RECHB(R4),CPT+14
LD RECHB(R5),CPT+12
JR PRPT
;
; READ KEYBOARD MESSAGE
;
CONIN: LD R8,^KEYBD
LD R5,R8
LD R13,80
JR CRTWT ;RS232 CONSOLE
CONID: CALR PUTCH
LD R14,^PRMSG+1
LD R13,2
CALR CONOUT ;ECHO CARRIAGE RETURN LINE FEED
CONIE: LD R14,^KEYBD
RET
;
; INPUT FROM SERIAL CONSOLE
;
CRTWT: IN R0,CPT+2
BITB RL0,0H
JR ZR,CRTWT
IN R0,CPT
AND R0,M7
CP R0,CR
JR ZR,CONID ;CARRIAGE RETURN
CALR PROCH
JR CRTWT
PROCH: CP R0,DEL
JR ZR,PRODL
CP R0,BSP
JR ZR,PRODL
CP R0,CAN
JR ZR,PROCN
CP R0,' '
RET CY
LD R2,^KEYBD+79
CP R8,R2
RET ZR
LD R14,R8
LD R13,1
CALR PUTCH
CALR CONOUT ;ECHO CHARACTER
RET
PRODL: LD R2,^KEYBD
CP R8,R2
RET ZR
LD R14,^BSPMS
DEC R8,1
PRODM: LD R13,3
CALR CONOUT
RET
PROCN: LD R14,^CNMSG
LD R8,^KEYBD
JR PRODM
;
; OUT R13 CHARACTERS FROM R14 TO CONSOLE
;
CONOUT: CALR NEXCH
CP R0,DEL
JR LGE,CONLF
JR CONCRT ;RS232 CONSOLE
CONLF: DEC R13,1
JR NZ,CONOUT
RET
CONCRT: IN R1,CPT+2
BITB RL1,2H
JR ZR,CONCRT
OUT CPT,R0
JR CONLF
;
; FETCH NEXT CHARACTER FROM (R14) TO R0
;
NEXCH: LDB RL0,R14^
INC R14,1
CLRB RH0
CP R0,CR
RET
;
; FETCH NEXT NON-BLANK CHARACTER FROM (R14) TO R0 - SET CR FLAG
;
GETCH: CALR NEXCH
RET ZR
CP R0,' '
JR ZR,GETCH
RET
;
; FETCH 16 BIT HEX TO R1 FROM (R14) TO CR OR COMMA
;
HEX_TST:CALR HEX16
RET ZR
POP R2,R15^
JP CMDER
HEX16: CLR R1
CALR GETCH
HX16A: SUB R0,'0'
RET CY
CP R0,10
JR CY,HX16B
SUB R0,7
CP R0,10
RET CY
CP R0,15
RET LGT
HX16B: LD R2,R1
AND R2,MU4
RET NZ
SLL R1,4
OR R1,R0
CALR GETCH
RET ZR
CP R0,','
RET ZR
JR HX16A
;
; FETCH 0 OR 1 BIT TO R1 FROM (R14)
;
GETBIT: CALR GETCH
GETBIT1:SUB R0,'0'
RET CY
LD R1,R0
SUB R0,1
RET LGT
JR GETCH
;
; PUT 4 HEX DIGITS FROM R1 TO (R8)
;
PUTH4: CALR PUTHD
CALR PUTHD
PUTHXB: CALR PUTHD
PUTHD: SLLL RR0,4
AND R0,M4
ADD R0,'0'
CP R0,'9'+1
JR MI,PUTCH
ADD R0,7
PUTCH: LDB R8^,RL0
INC R8,1
RET
;
; PUT CR AND LF TO (R8)
;
CRLF: LD R0,CR
CALR PUTCH
LD R0,LF
JR PUTCH
;
; RESTORE USER REGISTERS
;
RESTR: LD R0,U15
POP U15,R15^
LDL RR2,USFCW
BIT R2,14
JR NZ,RESTRB ;ENTERING SYSTEM MODE
LDCTL NSPOFF,R0
RESTRA: PUSHL R15^,RR2
PUSH R15^,R2
LDM R0,U0,15
PUSH R15^,U15
RET
RESTRB: LD R15,R0
JR RESTRA
;
; FETCH 16 BIT DECIMAL TO R1 FROM (R14) TO CR, =,OR COMMA
;
DEC16: CLR R1
CALR GETCH
DEC16A: SUB R0,'0'
RET CY
CP R0,9
RET LGT
LD R2,R0
MULT RR0,10
ADD R1,R2
CLR R2
ADC R0,R2
RET NZ
CALR GETCH
RET ZR
CP R0,'='
RET ZR
CALR COMMA
RET ZR
JR DEC16A
;
; FETCH 4 BIT DECIMAL TO R1 FROM (R14) TO CR, =, OR COMMA
;
DEC4: CALR DEC16
LD R2,R1
AND R2,MU12
RET
;
; PUT R1 SPACES TO (R8)
;
PUTSP: LD R0,' '
CALR PUTCH
DEC R1,1
JR NZ,PUTSP
RET
;
; PUT R1 CHARACTERS FROM R2 TO (R8)
;
PUTMS: LDIRB R8^,R2^,R1
RET
;
; PUT NXT PC=XXXX TO (R8)
;
PUTPC: LD R1,7
LD R2,^PCMS
CALR PUTMS
LD R1,USPC
CALR PUTH4
RET
;
; REGISTER IN R13=(R23) TO (R8)
;
PUTRG: CP R12,10
JR CY,PUTRA
LD R0,'1'
CALR PUTCH
LD R0,R12
ADD R0,'0'-10
JR PUTRB
PUTRA: LD R0,' '
CALR PUTCH
LD R0,R12
ADD R0,'0'
PUTRB: CALR PUTCH
LD R0,'='
CALR PUTCH
LD R1,R13^
JP PUTH4
;
; FLAG REGISTER TO (R8) CZSPDH
;
PUTFL1: LD R14,^FCWL
LD R3,0EH
PUTFA: CALR NEXCH
CALR PUTCH
DBJNZ RL3,PUTFA
RET
;
PUTFL2: LD R1,USFCW
LD R3,0EH
PUTFB: LD R0,'0'/2
RL R1,1
ADC R0,R0
CALR PUTCH
DBJNZ RL3,PUTFB
RET
;
; SAVE USER REGISTERS
;
SAVER: LDM U0,R0,15
POP R3,R15^
POP R2,R15^
POPL RR4,R15^
LDL USFCW,RR4
BIT R4,14
JR NZ,SAVERA ;FROM SYSTEM MODE
LDCTL R0,NSPOFF
LD U15,R0
JP R3^
SAVERA: LD U15,R15
LD R15,^STACK
JP R3^
;
; DISPLAY NXT PC=XXXX FOR BREAKPOINT
;
BRKDIS: LD R8,^KEYBD
CALR PUTPC
LD R2,^NIMS
LD R1,4
CALR PUTMS
LD R2,USPC
LD R1,R2^
CALR PUTH4
CALR CRLF
LD R13,21
LD R14,^KEYBD
CALR CONOUT
RET
;
; DISPLAY BRK PC=XXXX
;
BRKDIS1:LD R8,^KEYBD
CALR PUTBPC
CALR CRLF
LD R13,13
LD R14,^KEYBD
CALR CONOUT
RET
;
; PUT BRK PC=XXXX TO (R8)
;
PUTBPC: LD R1,7
LD R2,^BPCMS
CALR PUTMS
LD R1,HWBRK
CALR PUTH4
RET
;
RESET_RECVE_SWITCH:
LDA CHDEST,PUTCH ; RESET CO-ROUTINE SWITCH
RET
;
COMMA: CP R0,','
RET
;
; READ TIME AND DISPLAY
;
CLOCK: PUSHL R15^,RR0 ;SAVE REGISTERS
PUSHL R15^,RR2
PUSHL R15^,RR4
PUSH R15^,R8
PUSH R15^,R14
LD R0,0FFA3H ;SAVE CNT 1 & 2
OUT PTM+2,R0
LD R0,0FF11H ;DATA PNT
OUT PTM+2,R0 ;
IN R3,PTM ;INPUT SECONDS
LD R0,0FF12H ;DATA PNT
OUT PTM+2,R0 ;TO CNT 2
IN R2,PTM ;INPUT HOURS,MINUTES,SECONDS
LD R8,^KEYBD ;DISPLAY TIME
CALR CRLF
LD R1,R2 ;HOUR MINUTES
CALR PUTH4
LD R0,':'
CALR PUTCH
LD R1,R3 ;SECONDS
CALR PUTH4
LD R14,^KEYBD
LD R13,11
CALR CONOUT ;DISPLAY
POP R14,R15^
POP R8,R15^
POPL RR4,R15^
POPL RR2,R15^
POPL RR0,R15^
EI VI
IRET
;
; CHANNEL A
;
SRCBUFA:DB 18H ;CHANNEL A RESET
DB 04H ;SELECT WR 4.
DB 44H ;X16,1 STOPB,N.PARITY.
DB 05H ;SELECT WR 5.
DB 68H ; 8 BITS, TX EN.
DB 03H ;SELECT WR 3.
DB 0C1H ; 8 BITS, RX EN.
DB 01H ;SELECT WR 1.
DB 12H ;TXINT,RXINT EN.
DB 00H ;SELECT RR0
ENDBUFA:
;
;CHANNEL B
;
SRCBUFB:DB 18H ;CHANNEL B RESET
DB 04H ;SELECT WR 4.
DB 44H ;X16,1 STOPB,N.PARITY.
DB 05H ;SELECT WR 5.
DB 68H ; 8 BITS, TX EN.
DB 03H ;SELECT WR 3.
DB 0C1H ; 8 BITS, RX EN.
DB 01H ;SELECT WR 1.
DB 12H ;TXINT,RXINT EN.
DB 00H ;SELECT RR0
ENDBUFB:
; ORIGIN DATA ; TODO
;
;
NPSAREA:DW 126 DUP (?) ;NEW PROGRAM STATUS AREA
;
;
STATE:
CHDEST: DW 1 DUP (?) ;CO-ROUTINE ENTRY POINT
COUNT: DW 1 DUP (?) ;#BYTES TO BE TRANSFERED
DEST_ADR: DW 1 DUP (?) ;DESTINATION ADDRESS
OLD_STATE: DW 3 DUP (?) ;CO-ROUTINE RECOVERY INFO
BANKSW: DW 1 DUP (?) ;BANKSWITCH REGISTER
CTLWD: DW 1 DUP (?) ;CONSOLE I/O SWITCH CONTROL
KEYBD: DW 41 DUP (?) ;KEYBOARD BUFFER
HWBRK: DW 1 DUP (?) ;HARDWARE BREAKPOINT
BRKTAB: DW 6 DUP (?) ;BREAKPOINT TABLE
TRCNT: DW 1 DUP (?) ;TRACE INSTRUCTION COUNT
TRDIS: DW 1 DUP (?) ;TRACE DISPLAY INTERVAL
TRINC: DW 1 DUP (?) ;TRACE DISPLAY COUNT
USFCW: DW 1 DUP (?) ;USER FLAG CONTROL DW
USPC: DW 1 DUP (?) ;USER PROGRAM COUNTER
U0: DW 1 DUP (?) ;USER REGISTER SAVE AREA
U1: DW 1 DUP (?)
U2: DW 1 DUP (?)
U3: DW 1 DUP (?)
U4: DW 1 DUP (?)
U5: DW 1 DUP (?)
U6: DW 1 DUP (?)
U7: DW 1 DUP (?)
U8: DW 1 DUP (?)
U9: DW 1 DUP (?)
U10: DW 1 DUP (?)
U11: DW 1 DUP (?)
U12: DW 1 DUP (?)
U13: DW 1 DUP (?)
U14: DW 1 DUP (?)
U15: DW 1 DUP (?)
DW 20 DUP (?) ;USER STACK AREA
USRSTK: DW 0 DUP (?)
DW 20 DUP (?) ;SYSTEM STACK
STACK: DW 0 DUP (?)
END