; MONITOR for TRIPUTER V0.1
|
; MONITOR for TRIPUTER V0.1
|
; 27 May 2017
|
; 27 May 2017
|
|
; updated 25 January 2021
|
sramsize .equ x'8000
|
sramsize .equ x'8000
|
|
|
movd x'20000010,r0
|
movd x'20000010,r0
|
jump r0
|
jump r0
|
|
|
.align 16
|
.align 16
|
|
movd 100000,r0 ; wait some ms until reset stable (board dependent)
|
|
wloop: acbd -1,r0,wloop
|
movd x'20400000,r1 ; address of LEDs
|
movd x'20400000,r1 ; address of LEDs
|
movqd 0,0(r1) ; all went off
|
movqd 0,0(r1) ; all went off
|
movd x'FFFF,4(r1) ; the seven segment went off
|
movd x'FFFF,4(r1) ; the seven segment went off
|
lprd cfg,x'BF6
|
lprd cfg,x'BF6
|
lprd sp,x'300
|
lprd sp,x'300
|
lprd intbase,x'300
|
lprd intbase,x'300
|
addr nmi,@x'304
|
addr nmi,@x'304
|
movd x'20200000,r7 ; UART - fix Register
|
movd x'20200000,r7 ; UART - fix Register
|
addr welcome,r0
|
addr welcome,r0
|
bsr string
|
bsr string
|
; SRAM-Test : Bit Test
|
; SRAM-Test : Bit Test
|
movqw 1,r2
|
movqw 1,r2
|
movd x'20100000,r3
|
movd x'20100000,r3
|
l01: movw r2,0(r3) ; write
|
l01: movw r2,0(r3) ; write
|
addqd 2,r3
|
addqd 2,r3
|
addw r2,r2
|
addw r2,r2
|
cmpqw 0,r2
|
cmpqw 0,r2
|
bne l01
|
bne l01
|
movqw 1,r2
|
movqw 1,r2
|
movqw 0,r3
|
movqw 0,r3
|
l02: cmpw 0(r3),r2 ; read
|
l02: cmpw 0(r3),r2 ; read
|
bne err
|
bne err
|
addqd 2,r3
|
addqd 2,r3
|
addw r2,r2
|
addw r2,r2
|
cmpqw 0,r2
|
cmpqw 0,r2
|
bne l02
|
bne l02
|
movl datfp,-15(r3)
|
movl datfp,-15(r3)
|
cmpl datfp,-15(r3)
|
cmpl datfp,-15(r3)
|
bne err
|
bne err
|
; Address steping
|
; Address steping
|
movd x'20100000,r3
|
movd x'20100000,r3
|
movd x'20000,r2 ; Initialize on 0
|
movd x'20000,r2 ; Initialize on 0
|
l03: movqd 0,0(r3)
|
l03: movqd 0,0(r3)
|
addqd 4,r3
|
addqd 4,r3
|
acbd -1,r2,l03
|
acbd -1,r2,l03
|
movd x'20100000,r3 ; Test of 0 and 1 write
|
movd x'20100000,r3 ; Test of 0 and 1 write
|
movd x'40000,r2
|
movd x'40000,r2
|
l04: cmpqw 0,0(r3)
|
l04: cmpqw 0,0(r3)
|
bne err
|
bne err
|
movqw -1,0(r3)
|
movqw -1,0(r3)
|
addqd 2,r3
|
addqd 2,r3
|
acbd -1,r2,l04
|
acbd -1,r2,l04
|
movd x'20100000,r3 ; Test on 1 and 0 write
|
movd x'20100000,r3 ; Test on 1 and 0 write
|
movd x'40000,r2
|
movd x'40000,r2
|
l05: cmpqw -1,0(r3)
|
l05: cmpqw -1,0(r3)
|
bne err
|
bne err
|
movqw 0,0(r3)
|
movqw 0,0(r3)
|
addqd 2,r3
|
addqd 2,r3
|
acbd -1,r2,l05
|
acbd -1,r2,l05
|
movd x'20100000,r3 ; Test on 0
|
movd x'20100000,r3 ; Test on 0
|
movd x'40000,r2
|
movd x'40000,r2
|
l06: cmpqw 0,0(r3)
|
l06: cmpqw 0,0(r3)
|
bne err
|
bne err
|
addqd 2,r3
|
addqd 2,r3
|
acbd -1,r2,l06
|
acbd -1,r2,l06
|
addr sram_ok,r0
|
addr sram_ok,r0
|
bsr string
|
bsr string
|
; INT vector points to SRAM
|
; INT vector points to SRAM
|
movd x'20100300,r3
|
movd x'20100300,r3
|
addr nmi,4(r3)
|
addr nmi,4(r3)
|
addr int,0(r3)
|
addr int,0(r3)
|
lprd intbase,r3
|
lprd intbase,r3
|
lprd sp,x'20100300
|
lprd sp,x'20100300
|
lprd sb,x'20100400 ; working area
|
lprd sb,x'20100400 ; working area
|
movqd 0,-4(sb) ; counter in NMI
|
movqd 0,-4(sb) ; counter in NMI
|
sbitb 31,x'300004(r7) ; NMI enable
|
sbitb 31,x'300004(r7) ; NMI enable
|
; iDRAM-Test : Bit Test
|
; iDRAM-Test : Bit Test
|
movqd 1,r2
|
movqd 1,r2
|
movqd 0,r3
|
movqd 0,r3
|
l21: movd r2,0(r3) ; write
|
l21: movd r2,0(r3) ; write
|
addqd 4,r3
|
addqd 4,r3
|
addd r2,r2
|
addd r2,r2
|
cmpqd 0,r2
|
cmpqd 0,r2
|
bne l21
|
bne l21
|
movqd 1,r2
|
movqd 1,r2
|
movqd 0,r3
|
movqd 0,r3
|
l22: cmpd 0(r3),r2 ; read
|
l22: cmpd 0(r3),r2 ; read
|
bne err
|
bne err
|
addqd 4,r3
|
addqd 4,r3
|
addd r2,r2
|
addd r2,r2
|
cmpqd 0,r2
|
cmpqd 0,r2
|
bne l22
|
bne l22
|
movl datfp,-15(r3)
|
movl datfp,-15(r3)
|
cmpl datfp,-15(r3)
|
cmpl datfp,-15(r3)
|
bne err
|
bne err
|
; Address stepping
|
; Address stepping
|
movqd 0,r3
|
movqd 0,r3
|
movw sramsize,r2 ; Initialize to 0
|
movw sramsize,r2 ; Initialize to 0
|
l23: movqd 0,0(r3)
|
l23: movqd 0,0(r3)
|
addqd 4,r3
|
addqd 4,r3
|
acbw -1,r2,l23
|
acbw -1,r2,l23
|
movqd 0,r3 ; Test on 0 and 1 write
|
movqd 0,r3 ; Test on 0 and 1 write
|
movw sramsize,r2
|
movw sramsize,r2
|
l24: cmpqd 0,0(r3)
|
l24: cmpqd 0,0(r3)
|
bne err
|
bne err
|
movqd -1,0(r3)
|
movqd -1,0(r3)
|
addqd 4,r3
|
addqd 4,r3
|
acbw -1,r2,l24
|
acbw -1,r2,l24
|
movqd 0,r3 ; Test on 1 und 0 write
|
movqd 0,r3 ; Test on 1 und 0 write
|
movd sramsize,r2
|
movd sramsize,r2
|
l25: cmpqd -1,0(r3)
|
l25: cmpqd -1,0(r3)
|
bne err
|
bne err
|
movqd 0,0(r3)
|
movqd 0,0(r3)
|
addqd 4,r3
|
addqd 4,r3
|
acbw -1,r2,l25
|
acbw -1,r2,l25
|
movqd 0,r3 ; Test on 0
|
movqd 0,r3 ; Test on 0
|
movw sramsize,r2
|
movw sramsize,r2
|
l26: cmpqd 0,0(r3)
|
l26: cmpqd 0,0(r3)
|
bne err
|
bne err
|
addqd 4,r3
|
addqd 4,r3
|
acbw -1,r2,l26
|
acbw -1,r2,l26
|
; Now all Data right initialize
|
; Now all Data right initialize
|
movd x'300,r0
|
movd x'300,r0
|
lprd sp,r0
|
lprd sp,r0
|
lprd sb,x'400 ; working area
|
lprd sb,x'400 ; working area
|
addr int,0(r0)
|
addr int,0(r0)
|
addr nmi,4(r0)
|
addr nmi,4(r0)
|
lprd intbase,r0
|
lprd intbase,r0
|
movqd 0,-8(sb) ; readpointer of RX buffer
|
movqd 0,-8(sb) ; readpointer of RX buffer
|
movqd 0,-12(sb) ; writepointer of RX buffer
|
movqd 0,-12(sb) ; writepointer of RX buffer
|
movqb 0,-4(sb) ; count byte for NMI
|
movqb 0,-4(sb) ; count byte for NMI
|
movqd 0,-20(sb) ; pointer for Dump
|
movqd 0,-20(sb) ; pointer for Dump
|
addr idram_ok,r0
|
addr idram_ok,r0
|
bsr string
|
bsr string
|
bispsrw x'800 ; Int enable
|
bispsrw x'800 ; Int enable
|
sbitb 9,0(r7) ; UART RX Int on
|
sbitb 9,0(r7) ; UART RX Int on
|
addr string,-24(sb) ; save address of string service routine
|
addr string,-24(sb) ; save address of string service routine
|
; ***************************************************************
|
; ***************************************************************
|
; Endless loop : wait on Input from UART
|
; Endless loop : wait on Input from UART
|
; ***************************************************************
|
; ***************************************************************
|
new: movd x'20240002,-2(sb)
|
new: movd x'20240002,-2(sb)
|
sprd sb,r0
|
sprd sb,r0
|
bsr string
|
bsr string
|
movqd 0,-16(sb) ; Number of characters in buffer
|
movqd 0,-16(sb) ; Number of characters in buffer
|
loop: wait
|
loop: wait
|
cmpd -8(sb),-12(sb) ; has the UART something received?
|
cmpd -8(sb),-12(sb) ; has the UART something received?
|
beq loop ; No
|
beq loop ; No
|
; Auswertung
|
; Auswertung
|
movd -8(sb),r1
|
movd -8(sb),r1
|
movb x'100(sb)[r1:b],r0
|
movb x'100(sb)[r1:b],r0
|
addqb 1,-8(sb)
|
addqb 1,-8(sb)
|
checkb r1,cvalid,r0 ; special character ?
|
checkb r1,cvalid,r0 ; special character ?
|
bfs sys1 ; Yes
|
bfs sys1 ; Yes
|
movd -16(sb),r1
|
movd -16(sb),r1
|
cmpqd 0,r1
|
cmpqd 0,r1
|
bne sys2
|
bne sys2
|
cmpb '+',r0
|
cmpb '+',r0
|
beq sys3
|
beq sys3
|
cmpb '-',r0
|
cmpb '-',r0
|
beq sys4
|
beq sys4
|
sys2: movb r0,0(sb)[r1:b]
|
sys2: movb r0,0(sb)[r1:b]
|
addr 1(r1),-16(sb)
|
addr 1(r1),-16(sb)
|
sys0: bsr out
|
sys0: bsr out
|
br loop
|
br loop
|
sys1: cmpb 8,r0 ; Delete
|
sys1: cmpb 8,r0 ; Delete
|
bne sys5
|
bne sys5
|
cmpqd 0,-16(sb)
|
cmpqd 0,-16(sb)
|
beq loop
|
beq loop
|
addqd -1,-16(sb)
|
addqd -1,-16(sb)
|
bsr out
|
bsr out
|
movb ' ',r0
|
movb ' ',r0
|
bsr out
|
bsr out
|
movb 8,r0
|
movb 8,r0
|
br sys0
|
br sys0
|
|
; Here is some confusion about CR and LF operation with a terminal
|
sys5: cmpb 13,r0 ; CR only output
|
sys5: cmpb 13,r0 ; CR only output
|
beq sys0
|
bne sys_x ; was earlier sys0
|
|
bsr out
|
|
movb 10,r0
|
|
sys_x:
|
cmpb 10,r0 ; LF now analyzing input
|
cmpb 10,r0 ; LF now analyzing input
|
bne new
|
bne new
|
; Analyzing input:
|
; Analyzing input:
|
bsr out
|
bsr out
|
sprd sb,r2
|
sprd sb,r2
|
movd -16(sb),r1 ; Number of characters in buffer
|
movd -16(sb),r1 ; Number of characters in buffer
|
sys7: cmpqd 0,r1
|
sys7: cmpqd 0,r1
|
beq new
|
beq new
|
movb 0(r2),r0
|
movb 0(r2),r0
|
addqd 1,r2
|
addqd 1,r2
|
addqd -1,r1
|
addqd -1,r1
|
cmpb ' ',r0
|
cmpb ' ',r0
|
beq sys7 ; next character
|
beq sys7 ; next character
|
bicb x'20,r0 ; only capital letters
|
bicb x'20,r0 ; only capital letters
|
movqd 0,r6
|
movqd 0,r6
|
cmpb 'L',r0 ; "Load"
|
cmpb 'L',r0 ; "Load"
|
beq sys6
|
beq sys6
|
movqd 1,r6
|
movqd 1,r6
|
cmpb 'R',r0 ; "Run"
|
cmpb 'R',r0 ; "Run"
|
beq sys6
|
beq sys6
|
movqd 2,r6
|
movqd 2,r6
|
cmpb 'D',r0 ; "Dump"
|
cmpb 'D',r0 ; "Dump"
|
beq sys6
|
beq sys6
|
br erin ; Error in input
|
br erin ; Error in input
|
; now look for ' ' and address input
|
; now look for ' ' and address input
|
sys6: cmpqd 0,r1
|
sys6: cmpqd 0,r1
|
beq erin ; no input any more
|
beq erin ; no input any more
|
cmpb ' ',0(r2)
|
cmpb ' ',0(r2)
|
addqd 1,r2
|
addqd 1,r2
|
addqd -1,r1
|
addqd -1,r1
|
bne sys6
|
bne sys6
|
; now look for characters
|
; now look for characters
|
sys8: cmpqd 0,r1
|
sys8: cmpqd 0,r1
|
beq erin
|
beq erin
|
cmpb ' ',0(r2)
|
cmpb ' ',0(r2)
|
addqd 1,r2
|
addqd 1,r2
|
addqd -1,r1
|
addqd -1,r1
|
beq sys8
|
beq sys8
|
; Addresse build
|
; Addresse build
|
movqd 0,r4
|
movqd 0,r4
|
sy10: movb -1(r2),r3
|
sy10: movb -1(r2),r3
|
checkb r5,cziff,r3
|
checkb r5,cziff,r3
|
bfc sy11
|
bfc sy11
|
bicb x'20,r3
|
bicb x'20,r3
|
checkb r5,cabc,r3
|
checkb r5,cabc,r3
|
bfs erin ; illegal character -> Abort
|
bfs erin ; illegal character -> Abort
|
addb 10,r5
|
addb 10,r5
|
sy11: ashd 4,r4
|
sy11: ashd 4,r4
|
orb r5,r4
|
orb r5,r4
|
cmpqd 0,r1
|
cmpqd 0,r1
|
beq sys9
|
beq sys9
|
addqd 1,r2
|
addqd 1,r2
|
addqd -1,r1
|
addqd -1,r1
|
br sy10
|
br sy10
|
; Now execute ...
|
; Now execute ...
|
.align 4
|
.align 4
|
sys9: casew sy12[r6:w]
|
sys9: casew sy12[r6:w]
|
sy12: .word syld-sys9
|
sy12: .word syld-sys9
|
.word sygo-sys9
|
.word sygo-sys9
|
.word sydu-sys9
|
.word sydu-sys9
|
; Program Call
|
; Program Call
|
sygo: jsr r4
|
sygo: jsr r4
|
movd x'20200000,r7
|
movd x'20200000,r7
|
br new
|
br new
|
; make Dump , R4 is pointer
|
; make Dump , R4 is pointer
|
sys4: subd 512,-20(sb)
|
sys4: subd 512,-20(sb)
|
sys3: movd -20(sb),r4
|
sys3: movd -20(sb),r4
|
movb 13,r0 ; make CR before
|
movb 13,r0 ; make CR before
|
bsr out
|
bsr out
|
sydu: movb 16,r5 ; Number of Lines
|
sydu: movb 16,r5 ; Number of Lines
|
sy18: sprd sb,r0 ; Pointer to String
|
sy18: sprd sb,r0 ; Pointer to String
|
movzbd 28,r1
|
movzbd 28,r1
|
sy13: extd r1,r4,r2,4
|
sy13: extd r1,r4,r2,4
|
movb datah[r2:b],0(r0)
|
movb datah[r2:b],0(r0)
|
addqd 1,r0
|
addqd 1,r0
|
addqb -4,r1
|
addqb -4,r1
|
cmpqb -4,r1
|
cmpqb -4,r1
|
bne sy13
|
bne sy13
|
movb 16,r6
|
movb 16,r6
|
sy15: movb ' ',0(r0)
|
sy15: movb ' ',0(r0)
|
addqd 1,r0
|
addqd 1,r0
|
addr -1(r6),r2
|
addr -1(r6),r2
|
andb 3,r2
|
andb 3,r2
|
cmpqb 3,r2
|
cmpqb 3,r2
|
bne sy14
|
bne sy14
|
movb ' ',0(r0)
|
movb ' ',0(r0)
|
addqd 1,r0
|
addqd 1,r0
|
sy14: extsd 0(r4),r2,4,4
|
sy14: extsd 0(r4),r2,4,4
|
movb datah[r2:b],0(r0)
|
movb datah[r2:b],0(r0)
|
extsd 0(r4),r2,0,4
|
extsd 0(r4),r2,0,4
|
movb datah[r2:b],1(r0)
|
movb datah[r2:b],1(r0)
|
addqd 2,r0
|
addqd 2,r0
|
addqd 1,r4
|
addqd 1,r4
|
acbb -1,r6,sy15
|
acbb -1,r6,sy15
|
movw x'2720,0(r0)
|
movw x'2720,0(r0)
|
addqd 2,r0
|
addqd 2,r0
|
addr -16(r4),r4
|
addr -16(r4),r4
|
movb 16,r6
|
movb 16,r6
|
sy16: movb 0(r4),r2
|
sy16: movb 0(r4),r2
|
checkb r1,cvalid,r2
|
checkb r1,cvalid,r2
|
bfc sy17
|
bfc sy17
|
movb '.',r2
|
movb '.',r2
|
sy17: movb r2,0(r0)
|
sy17: movb r2,0(r0)
|
addqd 1,r0
|
addqd 1,r0
|
addqd 1,r4
|
addqd 1,r4
|
acbb -1,r6,sy16
|
acbb -1,r6,sy16
|
movd x'0A0D27,0(r0)
|
movd x'0A0D27,0(r0)
|
addqd 3,r0
|
addqd 3,r0
|
movzbw r0,-2(sb)
|
movzbw r0,-2(sb)
|
sprd sb,r0
|
sprd sb,r0
|
bsr string
|
bsr string
|
acbb -1,r5,sy18
|
acbb -1,r5,sy18
|
movd r4,-20(sb)
|
movd r4,-20(sb)
|
br new
|
br new
|
; Example:
|
; Example:
|
; ":200000006DA60BF757A000000C80CF0F00D7A1FFFFFE00D4A315165C7810D4A30D185C7800"
|
; ":200000006DA60BF757A000000C80CF0F00D7A1FFFFFE00D4A315165C7810D4A30D185C7800"
|
; ":007FE001A0"
|
; ":007FE001A0"
|
; R4 pointer to memory
|
; R4 pointer to memory
|
; R5 "0" counter
|
; R5 "0" counter
|
syld: movqd 0,r5
|
syld: movqd 0,r5
|
sy23: bsr getchar
|
sy23: bsr getchar
|
cmpb ':',r0
|
cmpb ':',r0
|
bne abort ; Abort if not ':' - what happens after this don't care
|
bne abort ; Abort if not ':' - what happens after this don't care
|
movqd 0,r6 ; Checksum=0
|
movqd 0,r6 ; Checksum=0
|
bsr getbyte
|
bsr getbyte
|
cmpqb 0,r0
|
cmpqb 0,r0
|
beq sy19 ; End
|
beq sy19 ; End
|
movb r0,r1
|
movb r0,r1
|
bsr getbyte
|
bsr getbyte
|
movzbd r0,r2
|
movzbd r0,r2
|
lshd 8,r2
|
lshd 8,r2
|
bsr getbyte
|
bsr getbyte
|
movb r0,r2
|
movb r0,r2
|
bsr getbyte
|
bsr getbyte
|
cmpqb 0,r0
|
cmpqb 0,r0
|
bne abort ; if not 0 - Abort. Limited to 64K
|
bne abort ; if not 0 - Abort. Limited to 64K
|
sy20: bsr getbyte
|
sy20: bsr getbyte
|
movb r0,r4[r2:b]
|
movb r0,r4[r2:b]
|
addqd 1,r2
|
addqd 1,r2
|
addqd 1,r5
|
addqd 1,r5
|
acbb -1,r1,sy20
|
acbb -1,r1,sy20
|
bsr getbyte
|
bsr getbyte
|
cmpqd 0,r6
|
cmpqd 0,r6
|
bne abort
|
bne abort
|
sy21: bsr getchar ; CR and LF read
|
sy21: bsr getchar ; CR and LF read
|
cmpb 10,r0 ; there are Files without CR !
|
cmpb 10,r0 ; there are Files without CR !
|
bne sy21
|
bne sy21
|
; show how many load up to now R2 -> decimal
|
; show how many load up to now R2 -> decimal
|
movd 10000,r0
|
movd 10000,r0
|
addr 1(sb),r3
|
addr 1(sb),r3
|
movd x'D0006,-2(sb)
|
movd x'D0006,-2(sb)
|
movd r5,r2
|
movd r5,r2
|
sy22: movd r2,r1
|
sy22: movd r2,r1
|
divd r0,r1
|
divd r0,r1
|
orb x'30,r1
|
orb x'30,r1
|
movb r1,0(r3)
|
movb r1,0(r3)
|
addqd 1,r3
|
addqd 1,r3
|
modd r0,r2
|
modd r0,r2
|
divd 10,r0
|
divd 10,r0
|
cmpqd 0,r0
|
cmpqd 0,r0
|
bne sy22
|
bne sy22
|
sprd sb,r0
|
sprd sb,r0
|
bsr string
|
bsr string
|
br sy23
|
br sy23
|
; ******* Load finished *******
|
; ******* Load finished *******
|
sy19: movqb 4,r1
|
sy19: movqb 4,r1
|
sy24: bsr getbyte
|
sy24: bsr getbyte
|
acbb -1,r1,sy24
|
acbb -1,r1,sy24
|
cmpqd 0,r6
|
cmpqd 0,r6
|
bne abort
|
bne abort
|
sy25: bsr getchar ; CR and LF read
|
sy25: bsr getchar ; CR and LF read
|
cmpb 10,r0
|
cmpb 10,r0
|
bne sy25
|
bne sy25
|
addr crlf,r0
|
addr crlf,r0
|
sy26: bsr string
|
sy26: bsr string
|
br new
|
br new
|
|
|
erin: addr erinfo,r0
|
erin: addr erinfo,r0
|
br sy26
|
br sy26
|
|
|
getchar:
|
getchar:
|
save [r1]
|
save [r1]
|
gec1: cmpd -8(sb),-12(sb)
|
gec1: cmpd -8(sb),-12(sb)
|
beq gec1
|
beq gec1
|
movd -8(sb),r1
|
movd -8(sb),r1
|
movb x'100(sb)[r1:b],r0
|
movb x'100(sb)[r1:b],r0
|
addqb 1,-8(sb)
|
addqb 1,-8(sb)
|
restore [r1]
|
restore [r1]
|
ret 0
|
ret 0
|
|
|
getbyte:
|
getbyte:
|
save [r1,r2]
|
save [r1,r2]
|
bsr getchar
|
bsr getchar
|
checkb r1,cziff,r0
|
checkb r1,cziff,r0
|
bfc geb1
|
bfc geb1
|
bicb x'20,r0
|
bicb x'20,r0
|
checkb r1,cabc,r0
|
checkb r1,cabc,r0
|
bfc geb2
|
bfc geb2
|
orw x'A00,r6
|
orw x'A00,r6
|
geb2: addb 10,r1
|
geb2: addb 10,r1
|
geb1: ashd 4,r1
|
geb1: ashd 4,r1
|
bsr getchar
|
bsr getchar
|
checkb r2,cziff,r0
|
checkb r2,cziff,r0
|
bfc geb3
|
bfc geb3
|
bicb x'20,r0
|
bicb x'20,r0
|
checkb r2,cabc,r0
|
checkb r2,cabc,r0
|
bfc geb4
|
bfc geb4
|
orw x'A00,r6
|
orw x'A00,r6
|
geb4: addb 10,r2
|
geb4: addb 10,r2
|
geb3: orb r2,r1
|
geb3: orb r2,r1
|
addb r1,r6 ; add to Checksum
|
addb r1,r6 ; add to Checksum
|
movb r1,r0
|
movb r1,r0
|
restore [r1,r2]
|
restore [r1,r2]
|
ret 0
|
ret 0
|
|
|
abort:
|
abort:
|
addr lderr,r0
|
addr lderr,r0
|
bsr string
|
bsr string
|
br new
|
br new
|
|
|
out: tbitb 11,0(r7)
|
out: tbitb 11,0(r7)
|
bfs out
|
bfs out
|
movb r0,0(r7)
|
movb r0,0(r7)
|
ret 0
|
ret 0
|
|
|
string:
|
string:
|
save [r1,r7]
|
save [r1,r7]
|
movd x'20200000,r7
|
movd x'20200000,r7
|
movw -2(r0),r1
|
movw -2(r0),r1
|
st3: cmpqw 0,r1
|
st3: cmpqw 0,r1
|
beq st1
|
beq st1
|
st2: tbitb 11,0(r7)
|
st2: tbitb 11,0(r7)
|
bfs st2
|
bfs st2
|
movb 0(r0),0(r7)
|
movb 0(r0),0(r7)
|
addqd 1,r0
|
addqd 1,r0
|
acbw -1,r1,st2
|
acbw -1,r1,st2
|
st1: restore [r1,r7]
|
st1: restore [r1,r7]
|
ret 0
|
ret 0
|
|
|
datal: ; 0 1 2 3 4 5 6 7 8 9 A B C D E F
|
datal: ; 0 1 2 3 4 5 6 7 8 9 A B C D E F
|
.byte x'3F,6,x'5B,x'4F,x'66,x'6D,x'7D,x'07,x'7F,x'6F,x'77,x'7C,x'39,x'5E,x'79,x'71
|
.byte x'3F,6,x'5B,x'4F,x'66,x'6D,x'7D,x'07,x'7F,x'6F,x'77,x'7C,x'39,x'5E,x'79,x'71
|
|
|
datah: .byte '0123456789ABCDEF'
|
datah: .byte '0123456789ABCDEF'
|
|
|
.align 4
|
.align 4
|
datfp: .double x'87654321,x'0FEDCBA9
|
datfp: .double x'87654321,x'0FEDCBA9
|
cvalid: .byte x'7E,x'20
|
cvalid: .byte x'7E,x'20
|
cziff: .byte '90'
|
cziff: .byte '90'
|
cabc: .byte 'FA'
|
cabc: .byte 'FA'
|
|
|
.word txt_1-sram_ok
|
.word txt_1-sram_ok
|
sram_ok: .byte '512K SRAM ok.',13,10
|
sram_ok: .byte '512K SRAM ok.',13,10
|
txt_1: .word txt_2-welcome
|
txt_1: .word txt_2-welcome
|
welcome: .byte 13,10,'Hardware: TRIPUTER V0.1 , 27 May 2017'
|
welcome: .byte 13,10,'Hardware: TRIPUTER V0.1 , 27 May 2017'
|
.byte 13,10,'Software: MONITOR V0.1 , 27 May 2017',13,10
|
.byte 13,10,'Software: MONITOR V0.1 , 27 May 2017',13,10
|
txt_2: .word txt_3-idram_ok
|
txt_2: .word txt_3-idram_ok
|
idram_ok: .byte '128K iDRAM ok.',13,10
|
idram_ok: .byte '128K iDRAM ok.',13,10
|
txt_3: .word txt_4-error
|
txt_3: .word txt_4-error
|
error: .byte 'Memory Fault !!!',13,10
|
error: .byte 'Memory Fault !!!',13,10
|
txt_4: .word txt_6-lderr
|
txt_4: .word txt_6-lderr
|
lderr: .byte 13,10,'Error in Load!',13,10
|
lderr: .byte 13,10,'Error in Load!',13,10
|
txt_6: .word txt_7-crlf
|
txt_6: .word txt_7-crlf
|
crlf: .byte 13,10
|
crlf: .byte 13,10
|
txt_7: .word txt_8-erinfo
|
txt_7: .word txt_8-erinfo
|
erinfo: .byte 'Error in input!',13,10
|
erinfo: .byte 'Error in input!',13,10
|
txt_8:
|
txt_8:
|
|
|
.align 4
|
.align 4
|
nmi: save [r0,r1]
|
nmi: save [r0,r1]
|
movb -4(sb),r0
|
movb -4(sb),r0
|
extsd r0,r1,0,4
|
extsd r0,r1,0,4
|
comb datal[r1:b],x'200004(r7)
|
comb datal[r1:b],x'200004(r7)
|
extsd r0,r1,4,4
|
extsd r0,r1,4,4
|
comb datal[r1:b],x'200005(r7)
|
comb datal[r1:b],x'200005(r7)
|
bispsrb 1
|
bispsrb 1
|
addpb 0,r0
|
addpb 0,r0
|
cmpb x'60,r0
|
cmpb x'60,r0
|
beq nmi1
|
beq nmi1
|
nmi2: movb r0,-4(sb)
|
nmi2: movb r0,-4(sb)
|
restore [r0,r1]
|
restore [r0,r1]
|
rett 0
|
rett 0
|
nmi1: movqb 0,r0
|
nmi1: movqb 0,r0
|
br nmi2
|
br nmi2
|
|
|
.align 4
|
.align 4
|
int: save [r0] ; RX UART
|
int: save [r0] ; RX UART
|
movd -12(sb),r0
|
movd -12(sb),r0
|
movb 0(r7),x'100(sb)[r0:b]
|
movb 0(r7),x'100(sb)[r0:b]
|
addqb 1,-12(sb)
|
addqb 1,-12(sb)
|
movb x'100(sb)[r0:b],x'200000(r7)
|
movb x'100(sb)[r0:b],x'200000(r7)
|
movb r0,x'200002(r7)
|
movb r0,x'200002(r7)
|
restore [r0]
|
restore [r0]
|
reti
|
reti
|
|
|
err: addr error,r0
|
err: addr error,r0
|
bsr string
|
bsr string
|
err1: comw x'4040,4(r1) ; 0 = leuchten
|
err1: comw x'4040,4(r1) ; 0 = leuchten
|
br err1
|
br err1
|
|
|
|
|