Basic Compiler Debug Test Examples - Retro Processors
Debug test examples published below were used for the compiler engine tests during the software development.
Most of the code tested is functionally meaningless, because the focus was on the inspection of the generated code for accuracy and precision.
Commented lines of code were probably used for the test of compiler error messages...
The newest test examples are on the top of the list.
A tip for advanced and/or curious users:
Be sure to turn on (set to 1 using the Registry Editor) the 'Print Debug Comment Lines in Compiler Listing' registry value for the software package you are using (located in 'HKEY_CURRENT_USER\Software\6502 Simulator IDE' registry key, for example), and then inspect the generated assembler listing for these examples, especially for complex expressions related ones at the bottom of the page...
string functions test #1
Dim s1 As String
Dim s2[5] As String
Dim s3 As String
Dim v1 As Byte
Dim v2 As Word
v1 = "9"
s2 = Chr(v1 - 2) + Chr(v1)
s1 = s2
v2 = Len(s2)
v2 = Asc(s1)
s1 = "abcde"
s2 = "abcde"
v1 = 1
If s1 = s2 Then v1 = 2
s1 = "abcdef"
v1 = 3
If s1 != s2 Then v1 = 4
s1 = LeftStr("01234567", 0)
s1 = LeftStr("01234567", 5)
s1 = LeftStr("01234567", 20)
s2 = LeftStr("01234567", 0)
s2 = LeftStr("01234567", 5)
s2 = LeftStr("a01234567", 20)
s1 = RightStr("01234567", 0)
s1 = RightStr("01234567", 5)
s1 = RightStr("01234567", 20)
s2 = RightStr("01234567", 0)
s2 = RightStr("01234567", 5)
s2 = RightStr("01234567", 20)
s1 = MidStr("01234567", 10, 3)
s1 = MidStr("01234567", 7, 3)
s2 = MidStr("01234567", 2, 10)
s1 = "01iuyt"
s3 = UCase(s1)
s2 = LCase(s3)
s2 = UCase("aBCdef")
s1 = "hghghghg"
s3 = ReplaceChr(s1, "h", "o")
s2 = ReplaceChr(s1, "g", "s")
s1 = "qwerty"
v2 = InStr(s1, "r")
v1 = InStr(s1, "0")
s2 = "56565"
v1 = InStrRev(s2, "5")
v1 = InStrRev(s2, "6")
v1 = CountChr(s2, "5")
s1 = FillStr("x", 10)
s2 = FillStr("y", 10)
s1 = RTrimChr("12345600", "0")
s2 = RTrimChr("01234567", "7")
s2 = RTrimChr("a1234444", "4")
s1 = LTrimChr("001234xx", "0")
s2 = LTrimChr("01234567", "0")
s2 = LTrimChr("01234567", "1")
s1 = ReverseStr("w234567")
s2 = ReverseStr(s1)
string functions test #2
Dim s1 As String
Dim s2[5] As String
s1 = LShiftStr("12345678", "x")
s1 = LShiftStr("1234", "x")
s1 = LShiftStr("1", "x")
s1 = LShiftStr("", "x")
s2 = LShiftStr("12345678", "x")
s2 = LShiftStr("123456", "x")
s2 = LShiftStr("12345", "x")
s2 = LShiftStr("1234", "x")
s2 = LShiftStr("1", "x")
s2 = LShiftStr("", "x")
s1 = RShiftStr("12345678", "x")
s1 = RShiftStr("1234", "x")
s1 = RShiftStr("1", "x")
s1 = RShiftStr("", "x")
s2 = RShiftStr("12345678", "x")
s2 = RShiftStr("123456", "x")
s2 = RShiftStr("12345", "x")
s2 = RShiftStr("1234", "x")
s2 = RShiftStr("1", "x")
s2 = RShiftStr("", "x")
s1 = LRotateStr("12345678")
s1 = LRotateStr("1234")
s1 = LRotateStr("1")
s1 = LRotateStr("")
s2 = LRotateStr("12345678")
s2 = LRotateStr("123456")
s2 = LRotateStr("12345")
s2 = LRotateStr("1234")
s2 = LRotateStr("1")
s2 = LRotateStr("")
s1 = RRotateStr("12345678")
s1 = RRotateStr("1234")
s1 = RRotateStr("1")
s1 = RRotateStr("")
s2 = RRotateStr("12345678")
s2 = RRotateStr("123456")
s2 = RRotateStr("12345")
s2 = RRotateStr("1234")
s2 = RRotateStr("1")
s2 = RRotateStr("")
string functions test #3
#define STRING_MAX_LENGTH = 10
Dim s1 As String
Dim s2[3] As String
Dim s3 As String
Dim sh1 As Short
Dim b1 As Byte
Dim w1 As Word
Dim l1 As Long
Dim g1 As Single
s1 = "208"
b1 = StrValB(s1)
s1 = ""
b1 = StrValB(s1)
s1 = "51397"
w1 = StrValW(s1)
s1 = "1234567123"
l1 = StrValL(s1)
s1 = "-6.7891230"
g1 = StrValS(s1)
s3 = "F"
w1 = DecFromHex(s3)
s3 = "FF"
w1 = DecFromHex(s3)
s3 = "FFF"
w1 = DecFromHex(s3)
s3 = "FFFF"
w1 = DecFromHex(s3)
s3 = "123456"
w1 = DecFromHex(s3) '1234h=4660
sh1 = -1
s1 = HexStr(sh1)
s2 = HexStr(sh1)
b1 = 0xaa
s1 = HexStr(b1)
s2 = HexStr(b1)
w1 = 0xfab
s1 = HexStr(w1)
s2 = HexStr(w1)
l1 = 0xfefe
s1 = HexStr(l1)
s2 = HexStr(l1)
string pointers
#define STRING_MAX_LENGTH = 16
Dim sx[1] As String
Dim px As StrPtr
'sx = "aa"
sx = "a"
SetStrPtr px = sx
'px = "aaaa"
px = "b"
Dim a1 As Byte
Dim s1[10] As String
Dim s2 As String
Dim p1 As StrPtr
Dim p2 As StrPtr
s1 = "abc"
s2 = "de"
SetStrPtr p1 = s1
p2 = p1
SetStrPtr p2 = p1
p2 = "1234"
SetStrPtr p2 = p2 + 2
p2 = "x"
SetStrPtr p2 = s2
p1 = "qwerty"
p2 = "zxcv"
s1 = p2
s1 = "aaa" + p2
a1 = 10
s1 = "abc" + "def"
s1 = sx + "7654" + "ggg"
s2 = sx + "01234" + "hh"
Call test1(s2, a1, s1)
End
Proc test1(ByRef arg1 As String, ByRef arg2 As Byte, ByRef arg3 As String)
arg1 = "555"
arg2 = 25
arg3 = "3434"
arg1 = arg1 + "876"
End Proc
bit related
Dim i As Integer
Dim var As UShort
Dim word As UInteger
For i = 0 To 7
SetBit i, var
ResetBit i, var
InvertBit i, var
Next i
var = 0x01
While var <> 0
For i = 7 To 1 Step -1
MakeBit i, var, TestBit(i - 1, var)
Next i
MakeBit 0, var, False
Wend
word = 0x01
While word <> 0
For i = 7 To 1 Step -1
MakeBit i, word.HB, TestBit(i - 1, word.HB)
Next i
MakeBit 0, word.HB, TestBit(7, word.LB)
For i = 7 To 1 Step -1
MakeBit i, word.LB, TestBit(i - 1, word.LB)
Next i
MakeBit 0, word.LB, 0
Wend
6502 c64_print
#define C64_TARGET = 1
#define C64_PRG_ADDSYS = 1
Dim i As UShort
Dim j As UShort
Dim v1 As Short
Dim v2 As Integer
Dim v3 As Long
Dim s1 As String
v1 = 1
v2 = 234
v3 = 987654
s1 = "Num = "
C64_Cls
For i = 1 To 3
j = 1
If i = 2 Then j = 10
If i = 3 Then j = 100
C64_Print s1, #(v1 * j), Cr
C64_Print s1, v2 * j, Cr
C64_Print s1, v3 * j, Cr
Next i
print
Dim i As UShort
Dim j As UShort
Dim v1 As Short
Dim v2 As Integer
Dim v3 As Long
Dim s1 As String
Const myport = 0xff
v1 = 1
v2 = 234
v3 = 987654
s1 = "Num = "
For i = 1 To 3
j = 1
If i = 2 Then j = 10
If i = 3 Then j = 100
Print myport, s1, #(v1 * j), CrLf
Print myport, s1, v2 * j, CrLf
Print myport, s1, v3 * j, CrLf
Next i
single to string
#define STRING_MAX_LENGTH = 16
#define SINGLE_DECIMAL_PLACES = 6
Dim x1 As Single
Dim x2 As Single
Dim x3 As Single
Dim str1 As String
Dim str2 As String
Dim str3 As String
x1 = 0.00000190 'e
str1 = #x1
x1 = 0.00000191
str1 = #x1
x1 = 8388607
str1 = #x1
x1 = 8388608 'e
str1 = #x1
x1 = 838860
str1 = #x1
x1 = 83886
str1 = #x1
x1 = 123.456789
str1 = #x1
x2 = -0.987654
str2 = #x2
x3 = 543987
str3 = #x3
x2 = -800000
str2 = #x2
x3 = 0.00987
str3 = #x3
integer types to string
#define STRING_MAX_LENGTH = 16
#define SINGLE_DECIMAL_PLACES = 3
Dim x1 As Integer
Dim x2 As UInteger
Dim y1 As Short
Dim y2 As UShort
Dim y3 As Bit
Dim str1 As String
Dim str2 As String
Dim str3 As String
Dim z1 As Long
Dim z2 As ULong
y1 = -108
y2 = 245
y3 = y1 != y2
str1 = #y1 + " " + #y2 + " " + #y3
x1 = -12345
x2 = 23456
Const c1 = "xyz"
str1 = c1
str2 = "abcde"
str3 = str1
str1 = #x1
str2 = #x2
str2 = #6123
str3 = str1 + " " + str2 + " " + #x2
x1 = Len(str1)
x2 = Len(str2)
y1 = Len(str3)
z1 = -2012789543
z2 = 3456987123
str1 = #z1
str2 = #z2
str3 = #-9123123
str3 = str1 + " " + str2
poke, peek
Dim v1 As UInteger
Dim v2 As UShort
Dim v3 As Long
Dim d(6) As UShort
Dim i As UShort
v1 = 0xf000
v2 = 0xff
v2 = Peek(v1 + 1)
v3 = 0x55555555
v3 = Peek(v1 + 1)
For i = 0 To 5
d(i) = 110 + i
Next i
For i = 0 To 5
Poke v1 + i, d(i) + 100
Next i
For i = 0 To 5
d(5 - i) = Peek(v1 + i)
Next i
for-next test
Dim x1 As Short
Dim x2 As UShort
Dim x3 As Integer
Dim x4 As UInteger
For x1 = -50 To 100 Step 100
Next x1
For x1 = 50 To -100 Step -100
Next x1
For x2 = 100 To 250 Step 100
Next x2
For x2 = 170 To 50 Step -100
Next x2
For x3 = -5000 To 30000 Step 10000
Next x3
For x3 = 5000 To -30000 Step -10000
Next x3
For x4 = 10000 To 65000 Step 10000
Next x4
For x4 = 17000 To 5000 Step -10000
Next x4
sqr test
Dim v1 As Integer
Dim v2 As Short
Dim s1 As Single
Dim s2 As Single
s1 = 200
s2 = Sqr(s1) + 1
v1 = 10000
v2 = Sqr(v1)
comparison test
Dim x As Single
Dim y As Single
Dim _ne As Bit
Dim _lt As Bit
Dim _le As Bit
Dim _eq As Bit
Dim _ge As Bit
Dim _gt As Bit
x = -20
y = -5
While x <= 10
_ne = x <> y
_lt = x < y
_le = x <= y
_eq = x = y
_ge = x >= y
_gt = x > y
x = x + 15
Wend
long arithmetics
Dim v1 As Long
Dim v2 As ULong
Dim v3 As UInteger
v2 = 4123123 * 1000
v2 = 0xffffffff / 0xffffffff
v2 = 0xffffffff / 1
v2 = 1 / 0xffffffff
v2 = 100 / 0x0fffffff
v2 = 100 % 0x0fffffff
v2 = 101 / 0xefffffff
v2 = 101 % 0xefffffff
v2 = 102 / 0xffffffff
v2 = 102 % 0xffffffff
v2 = 4000000000 / 256 '15625000
v3 = 30000 / 100
v3 = 21234 / 100
v3 = 21234 % 100
v3 = 45678 / 100
v3 = 65535 / 100
v2 = 4123123123 / 1000
v3 = 60005 / 5
v1 = 123123123 / 1000
v1 = 123123123 % 1000
v1 = 2123123123 / 1000
v1 = 2123123123 % 1000
v1 = -2123123123 / 1000
v1 = -2123123123 % 1000
v2 = 1123123123 / 1000
v2 = 1123123123 % 1000
v2 = 2123123123 / 1000
v2 = 2123123123 % 1000
v2 = 3123123123 / 1000
v2 = 3123123123 % 1000
single cshort
Dim x1 As Single
Dim x2 As Single
Dim v1 As Integer
Dim v2 As Integer
v2 = -100
x1 = 12.5
x2 = 50.7
v1 = x1 + x2
v1 = CShort x1 + CShort(x2) - v2
logical
Dim var1 As ULong
Dim var2 As ULong
Dim var3 As Integer
Dim var4 As ULong
var3 = 4
var1 = 3 << 16
var2 = var1 >> var3
var1 = 0x12343355
var2 = 0x22223456
var4 = var1 Or var2
var4 = var1 & var2
data type conversions
Dim xbool As Boolean
Dim xshort As Short
Dim xint As Integer
Dim xlong As Long
Dim xsingle As Single
Dim xushort As UShort
Dim xuint As UInteger
Dim xulong As ULong
Dim xbool2 As Boolean
Dim xshort2 As Short
Dim xint2 As Integer
Dim xlong2 As Long
Dim xsingle2 As Single
Dim xushort2 As UShort
Dim xuint2 As UInteger
Dim xulong2 As ULong
xshort = -100
xsingle = xshort
xushort = 200
xsingle = xushort
xint = -30000
xsingle = xint
xuint = 50000
xsingle = xuint
xlong = -1500500500
xsingle = xlong
xulong = 500500500
xsingle = xulong
xulong = 2500500500
xsingle = xulong
xulong = 3500500500
xsingle = xulong
xulong = 4200500500
xsingle = xulong
xsingle = 5123123123
xlong = xsingle
xulong = xsingle
xsingle = 4294967040
xlong = xsingle
xulong = xsingle
xsingle = 255
xshort = xsingle
xushort = xsingle
xint = xsingle
xuint = xsingle
xlong = xsingle
xulong = xsingle
xsingle = 65535
xshort = xsingle
xushort = xsingle
xint = xsingle
xuint = xsingle
xlong = xsingle
xulong = xsingle
xsingle = 4000000000
xlong = xsingle
xulong = xsingle
xsingle = -1
xshort = xsingle
xushort = xsingle
xint = xsingle
xuint = xsingle
xlong = xsingle
xulong = xsingle
xshort = -2
xshort2 = xshort
xushort2 = xshort
xint2 = xshort
xuint2 = xshort
xlong2 = xshort
xulong2 = xshort
xushort = 10
xshort2 = xushort
xushort2 = xushort
xint2 = xushort
xuint2 = xushort
xlong2 = xushort
xulong2 = xushort
xint = -3
xshort2 = xint
xushort2 = xint
xint2 = xint
xuint2 = xint
xlong2 = xint
xulong2 = xint
xuint = 55
xshort2 = xuint
xushort2 = xuint
xint2 = xuint
xuint2 = xuint
xlong2 = xuint
xulong2 = xuint
xlong = -1
xshort2 = xlong
xushort2 = xlong
xint2 = xlong
xuint2 = xlong
xlong2 = xlong
xulong2 = xlong
xulong = 100
xshort2 = xulong
xushort2 = xulong
xint2 = xulong
xuint2 = xulong
xlong2 = xulong
xulong2 = xulong
xbool = True
xbool = 0
xbool = 10
xshort = -100
xushort = 200
xint = -30000
xuint = 50000
xlong = -1500500500
xulong = 3500500500
xsingle = 5678.4321
xsingle = -234.5432
xbool2 = xbool
xshort2 = xshort
xint2 = xint
xlong2 = xlong
xsingle2 = xsingle
xushort2 = xushort
xuint2 = xuint
xulong2 = xulong
fill memory
#define ROMEND = 0x0FFF
#define RAMSTART = 0x3000
#define RAMEND = 0x33FF
Dim xbool As Boolean
Dim xshort As Short
Dim xint As Integer
Dim xlong As Long
Dim xsingle As Single
Dim xushort As UShort
Dim xuint As UInteger
Dim xulong As ULong
Dim xbool2 As Boolean
Dim xshort2 As Short
Dim xint2 As Integer
Dim xlong2 As Long
Dim xsingle2 As Single
Dim xushort2 As UShort
Dim xuint2 As UInteger
Dim xulong2 As ULong
Dim xbool3(5) As Boolean
Dim xshort3(5) As Short
Dim xint3(5) As Integer
Dim xlong3(5) As Long
Dim xsingle3(5) As Single
Dim xushort3(5) As UShort
Dim xuint3(5) As UInteger
Dim xulong3(5) As ULong
Dim xfill(370) As Short
Dim xfill2(9) As Short
'Dim xfill3 As Short
xbool = True
xbool = 0
xbool = 10
xshort3(40) = 1
xshort3(200) = 1
xlong = xint.LB
xlong = xshort
'xlong = CLong(xshort2)
xbool3(10) = 1