commit 4f03030

Devine Lu Linvega  ·  2024-07-15 20:40:10 +0000 UTC
parent b3f207b
Fixed stack inspect debugger
3 files changed,  +40, -25
+35, -22
  1@@ -3,6 +3,7 @@
  2 |0013
  3 
  4 	@Zeropage &byte $1 &short $2
  5+	@id $1
  6 
  7 |0100
  8 
  9@@ -11,40 +12,45 @@
 10 	( part 1
 11 		> LIT2: Puts a short on the stack
 12 		> LIT: Puts a byte on the stack
 13-		> #18 DEO: Write a letter in terminal
 14-		> ;meta: Push short
 15-		> #06 DEO: Write to metadata ports )
 16+		> #06 DEO: Write to metadata ports
 17+		> #18 DEO: Write a letter in terminal )
 18 
 19-	[ LIT2 "kO ] #18 DEO #18 DEO #0a18 DEO
 20 	;meta #06 DEO2
 21+	[ LIT2 "kO ] #18 DEO #18 DEO
 22+	[ LIT2 "1 18 ] DEO #0a18 DEO
 23 
 24 	( part 2
 25 		> LITr: Put a byte on return stack
 26 		> STH: Move a byte from working stack to return stack
 27 		> STH2r: Move a short from return stack to working stack )
 28 
 29-	[ LITr "k ] [ LIT "O ] STH STH2r #18 DEO #18 DEO #0a18 DEO
 30+	[ LITr "k ] [ LIT "O ] STH STH2r #18 DEO #18 DEO
 31+	[ LIT2 "2 18 ] DEO #0a18 DEO
 32 
 33 	( part 3
 34 		> LIT2r: Put a short on return stack
 35 		> DUP: Duplicate byte
 36 		> ADDr: Add bytes on return stack )
 37 
 38-	[ LIT2r "k 4d ] #01 DUP STH ADDr STH ADDr STH2r #18 DEO #18 DEO #0a18 DEO
 39+	[ LIT2r "k 4d ] #01 DUP STH ADDr STH ADDr STH2r #18 DEO #18 DEO
 40+	[ LIT2 "3 18 ] DEO #0a18 DEO
 41 
 42 	( part 4
 43-		> JSI: Subroutine to relative absolute address
 44+		> JSI: Subroutine to relative short address
 45 		> JMP2r: Jumps to absolute address on return stack )
 46 
 47 	subroutine
 48+	[ LIT2 "4 18 ] DEO #0a18 DEO
 49 
 50 	( part 5
 51 		> POP2: Removes a short from the stack
 52 		> INC2: Increments short on stack
 53-		> LDAk: Non-destructive load byte from absolute address
 54-		> JCI: Conditional subroutine to relative absolute address )
 55+		> DUP2: Duplicate short
 56+		> LDA: load byte from absolute address
 57+		> JCI: Conditional subroutine to relative short address )
 58 
 59-	;Dict/ok pstr #0a18 DEO
 60+	;Dict/ok pstr
 61+	[ LIT2 "5 18 ] DEO #0a18 DEO
 62 
 63 	( part 6
 64 		> GTH2k: Non-destructive greater-than short
 65@@ -70,6 +76,8 @@
 66 	STHr AND STHr AND
 67 	;Dict/stack-wrap test-part
 68 
 69+	( restore stack ) #0000 #0000
 70+
 71 	( Part 8
 72 		> Testing RAM wrapping
 73 		> Storing 12 in 0xffff, and 34 in 0x0000 )
 74@@ -111,7 +119,7 @@ BRK
 75 	( name ) "Opctest 0a
 76 	( details ) "A 20 "Testing 20 "Program 0a
 77 	( author ) "By 20 "Devine 20 "Lu 20 "Linvega 0a
 78-	( date ) "1 20 "Nov 20 "2023 $2
 79+	( date ) "18 20 "Feb 20 "2024 $2
 80 
 81 @test-part ( f name* -- )
 82 	pstr ?{
 83@@ -123,26 +131,28 @@ BRK
 84 
 85 	LDA2k JSR2 DUP ?&pass
 86 		;Dict/missed pstr
 87-		[ LIT2 &name $2 ] pstr/ #0a18 DEO
 88-		#01 ;on-reset/fail STA JMP2r
 89+		[ LIT2 &name $2 ] pstr
 90+		[ LIT2 "# 18 ] DEO
 91+		[ LIT2 "a -id ] LDZ ADD #18 DEO
 92+		#0a18 DEO
 93+		#01 ;on-reset/fail STA
 94 		&pass
 95+	.id LDZ INC .id STZ
 96 
 97 JMP2r
 98 
 99 @set ( name* -- f )
100 
101 	;run-test/name STA2 #01
102+	[ LIT2 ff -id ] STZ
103 
104 JMP2r
105 
106 @pstr ( str* -- )
107-
108-	&w ( -- )
109-		LDAk #18 DEO
110-		INC2 & LDAk ?&w
111-	POP2
112-
113-JMP2r
114+	DUP2 LDA
115+		DUP ?{ POP POP2 JMP2r }
116+		#18 DEO
117+	INC2 !pstr
118 
119 @tests
120 =op-equ [
121@@ -216,7 +226,7 @@ JMP2r
122 =op-jmi [
123 	=op-jmi/a ]
124 =op-jsi [
125-	=op-jsi/a =op-jsi/b ]
126+	=op-jsi/a =op-jsi/b =op-jsi/c =op-jsi/d ]
127 	&end
128 
129 @op-equ ;Dict/equ !set
130@@ -406,6 +416,8 @@ JMP2r
131 @op-jsi ;Dict/jsi !set
132 	&a #02 #04 routine #06 EQU JMP2r
133 	&b ;&return special &return JMP2r
134+	&c ,&skip-c JMP &routine-c ADD JMP2r &skip-c #02 #04 op-jsi/routine-c #06 EQU JMP2r
135+	&d ,&skip-d JMP &routine-d ADD JMP2r &skip-d #02 #04 op-jsi-far-routine-d #06 EQU JMP2r
136 
137 @special ( routine* -- f )
138 
139@@ -416,7 +428,7 @@ JMP2r
140 JMP2r
141 
142 @routine ( a b -- c ) ADD JMP2r
143-@subroutine ( -- ) [ LIT2 "kO ] #18 DEO #18 DEO #0a18 DEO JMP2r
144+@subroutine ( -- ) [ LIT2 "kO ] #18 DEO #18 DEO JMP2r
145 @Absolute &byte $1 &short $2
146 
147 @Dict [
148@@ -441,3 +453,4 @@ JMP2r
149 	&jmi "JMI $1 &jci "JCI $1 &jsi "JSI $1
150 ]
151 
152+|7000 @op-jsi-far-routine-d op-jsi/routine-d JMP2r
+3, -1
 1@@ -5,7 +5,7 @@ EMU_src=${CLI_src} src/devices/screen.c src/devices/controller.c src/devices/mou
 2 RELEASE_flags=-DNDEBUG -O2 -g0 -s
 3 DEBUG_flags=-std=c89 -D_POSIX_C_SOURCE=199309L -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wextra -Werror=implicit-int -Werror=incompatible-pointer-types -Werror=int-conversion -Wvla -g -Og -fsanitize=address -fsanitize=undefined
 4 
 5-.PHONY: all debug dest run test install uninstall format clean archive
 6+.PHONY: all debug dest run test install uninstall format clean grab archive
 7 
 8 all: dest bin/uxnasm bin/uxncli bin/uxn11
 9 
10@@ -25,6 +25,8 @@ uninstall:
11 	@ rm -f ~/bin/uxn11 ~/bin/uxnasm ~/bin/uxncli
12 format:
13 	@ clang-format -i src/uxnasm.c src/uxncli.c src/uxn11.c src/devices/*
14+grab:
15+	@ cp ../uxn-utils/cli/opctest/opctest.tal etc/opctest.tal
16 archive:
17 	@ cp src/uxnasm.c ../oscean/etc/uxnasm.c.txt
18 clean:
+2, -2
 1@@ -45,8 +45,8 @@ static void
 2 system_print(Stack *s)
 3 {
 4 	Uint8 i;
 5-	for(i = s->ptr - 7; i != (Uint8)(s->ptr + 1); i++)
 6-		fprintf(stderr, "%02x%c", s->dat[i], i == 0 ? '|' : ' ');
 7+	for(i = s->ptr - 7; i != (Uint8)(s->ptr); i++)
 8+		fprintf(stderr, "%02x%c", s->dat[i], i == 0xff ? '|' : ' ');
 9 	fprintf(stderr, "< \n");
10 }
11