prog8/python/testsource/dtypes.ill

312 lines
7.9 KiB
Plaintext
Raw Normal View History

2017-12-21 22:05:35 +00:00
; var definitions and immediate primitive data type tests
2017-12-21 13:52:30 +00:00
%output raw
%zp clobber
2017-12-28 22:03:59 +00:00
2017-12-21 13:52:30 +00:00
2018-01-03 20:43:19 +00:00
%import c64lib
2017-12-25 11:58:52 +00:00
2017-12-21 13:52:30 +00:00
~ ZP {
; ZeroPage block definition:
; base address is set to $04 (because $00 and $01 are used by the hardware, and $02/$03 are scratch)
; everything here ends up in the zeropage, as long as there is space.
; you can NOT put subroutines in here (yet).
}
2018-01-09 01:40:32 +00:00
~ ZP {
2017-12-21 13:52:30 +00:00
var zpvar1
var zpvar2
2017-12-21 13:52:30 +00:00
memory zpmem1 = $f0
const zpconst = 1.234
2018-08-06 01:35:43 +00:00
var word zpvarw1
var word zpvarw2
var float zpvarflt1 = 11.11
var float zpvarflt2 = 22.22
var float zpvarflt3
2017-12-21 13:52:30 +00:00
}
~ ZP {
; will be merged with other ZP blocks!
var zpvar1b = $88
}
~ foo {
var foovar1
memory foomem1 = $f0f0
const fooconst = 1.234
2018-01-14 23:20:36 +00:00
return
2017-12-21 13:52:30 +00:00
}
~ main {
; variables
var uninitbyte1
2018-08-06 01:35:43 +00:00
var byte uninitbyte2
2017-12-21 13:52:30 +00:00
var initbyte1 = $12
var initbyte1b = true
2018-08-06 01:35:43 +00:00
var byte initbyte2 = $12
var byte initbyte2b = false
var byte initbyte3 = 99.876
var initchar1 = '@'
var byte initchar2 = '@'
var word uninitword
var word initword1 = $1234
var word initword1b = true
var word initword2 = false
var word initword3 = 9876.554321
var word initword5 = 20
var float uninitfloat
var float initfloat1 = 0
var float initfloat1b = true
var float initfloat2 = -1.234e-14
var float initfloat3 = 9.87e+14
var float initfloat4 = 1.70141183e+38
var float initfloat5 = -1.70141183e+38
var float initfloat6 = 1.234
var wordarray( 256 ) uninit_wordarray
var wordarray(10) init_wordarray = $1234
var wordarray(10) init_wordarrayb = true
var array( 256) uninit_bytearray
var array(10 ) init_bytearray =$12
var array(10 ) init_bytearrayb =true
var array(10 ) init_bytearrayc ='@'
var str text = "hello-null"
var strp ptext = 'hello-pascal'
var strs stext = 'screencodes-null'
var strps pstext = "screencodes-pascal"
var matrix( 2, 128 ) uninitmatrix
var matrix(10, 20) initmatrix1 = $12
var matrix(10, 20) initmatrix1b = true
var matrix(10, 20) initmatrix1c = '@'
var matrix(10, 20) initmatrix1d = 123.456
2017-12-21 13:52:30 +00:00
; memory-mapped variables
memory membyte1 = $cf01
2018-08-06 01:35:43 +00:00
memory byte membyte2 = $c222
memory word memword1 = $cf03
memory float memfloat = $cf04
memory array(10 ) membytes = $cf05
memory wordarray( 10) memwords = $cf06
memory matrix( 10, 20 ) memmatrix = $cf07
2017-12-21 13:52:30 +00:00
; constants (= names for constant values, can never occur as lvalue)
const cbyte1 = 1
const cbyte1b = false
2018-08-06 01:35:43 +00:00
const byte cbyte2 = 1
const byte cbyte3 = '@'
const byte cbyte4 = true
const word cword1 = false
const word cword2 = $1234
const word cword5 = 9876.5432
2017-12-21 13:52:30 +00:00
const cfloat1 = 1.2345
2018-08-06 01:35:43 +00:00
const float cfloat2 = 2.3456
const float cfloat2b = cfloat2*3.44
const float cfloat3 = true
const str ctext3 = "constant-text"
const strp ctext4 = "constant-ptext"
const strs ctext5 = "constant-stext"
const strps ctext6 = "constant-pstext"
2017-12-21 13:52:30 +00:00
; taking the address of various things:
2018-08-06 01:35:43 +00:00
var word vmemaddr1 = &membyte1
var word vmemaddr2 = &memword1
var word vmemaddr3 = &memfloat
var word vmemaddr4 = &membytes
var word vmemaddr5 = &memwords
var word vmemaddr6 = &memmatrix
var word vmemaddr8 = 100*sin(cbyte1)
var word vmemaddr9 = cword2+$5432
var word vmemaddr10 = cfloat2b
2018-01-05 21:52:23 +00:00
2017-12-21 13:52:30 +00:00
; taking the address of things from the ZP will work even when it is a var
; because zp-vars get assigned a specific address (from a pool). Also, it's a byte.
2018-01-05 21:52:23 +00:00
2018-08-06 01:35:43 +00:00
var word initword0a = &ZP.zpmem1
2018-01-07 01:36:27 +00:00
var initbytea0 = &ZP.zpmem1
2017-12-21 13:52:30 +00:00
; (constant) expressions
2018-08-06 01:35:43 +00:00
var word expr_byte1b = -1-2-3-4-$22+$80+ZP.zpconst
var byte expr_fault2 = 1 + (8/3)+sin(33) + len("abc")
2017-12-21 13:52:30 +00:00
2018-01-05 02:11:13 +00:00
sin:
2017-12-21 13:52:30 +00:00
return
2018-01-05 02:11:13 +00:00
max:
2017-12-21 13:52:30 +00:00
return
2018-01-05 02:11:13 +00:00
start:
2017-12-21 13:52:30 +00:00
; --- immediate primitive value assignments ----
2017-12-24 23:15:04 +00:00
A = [$99]
A = [$aabb]
A = $99
A = [cbyte3]
2017-12-21 13:52:30 +00:00
A = 0
A = '@'
A = 1.2345
A = false
A = 255
A = X
2017-12-23 13:36:23 +00:00
A = [$99]
A = [$c020.byte]
2017-12-21 13:52:30 +00:00
A = [$c020]
2017-12-23 13:36:23 +00:00
A = cbyte3
2017-12-21 22:05:35 +00:00
A = membyte2
2017-12-23 13:36:23 +00:00
A = uninitbyte1
2017-12-21 22:05:35 +00:00
2017-12-21 13:52:30 +00:00
XY = 0
XY = '@'
XY = 1.2345
XY = 456.66
XY = 65535
XY = true
XY = false
XY = text
2017-12-23 13:36:23 +00:00
XY = cbyte3
2017-12-24 23:15:04 +00:00
XY = [cbyte3]
XY = [cword2]
2017-12-23 13:36:23 +00:00
XY = uninitbyte1
2017-12-21 13:52:30 +00:00
XY = "text-immediate"
AY = "text-immediate"
2017-12-23 13:36:23 +00:00
AX = ctext3
2017-12-21 13:52:30 +00:00
AX = ""
AX = XY
AX = Y
2017-12-23 13:36:23 +00:00
XY = membyte2
2018-01-05 21:52:23 +00:00
XY = membyte2
2017-12-23 13:36:23 +00:00
XY = memword1
XY = sin
2018-02-20 00:16:16 +00:00
XY = &sin ; @todo not yet implemented
2017-12-23 13:36:23 +00:00
[$c000] = A
2017-12-21 13:52:30 +00:00
[$c000] = 255
[$c000] = '@'
[$c000] = true
[$c000] = false
2017-12-23 13:36:23 +00:00
[$c000] = cbyte3
[$c000] = uninitbyte1
[$c000] = membyte2
2017-12-24 23:15:04 +00:00
[$c000] = cbyte2
[$c000] = [cword2]
2017-12-23 13:36:23 +00:00
[$c000.word] = A
[$c000.word] = AX
[$c000.word] = cbyte3
[$c000.word] = cword2
[$c000.word] = ctext3
2017-12-21 13:52:30 +00:00
[$c000.word] = 65535
[$c000.word] = "text"
[$c000.word] = ""
2017-12-23 13:36:23 +00:00
[$c000.word] = uninitbyte1
[$c000.word] = membyte2
2018-02-20 00:16:16 +00:00
[$c000.word] = &membyte2 ; @todo not yet implemented
2017-12-24 23:15:04 +00:00
[$c000.word] = [cword2]
2017-12-23 13:36:23 +00:00
[$c000.word] = memword1
2017-12-21 13:52:30 +00:00
[$c000.float] = 65535
[$c000.float] = 456.66
[$c000.float] = 1.70141183e+38
2017-12-23 13:36:23 +00:00
[$c000.float] = cbyte3
[$c000.float] = cword2
2017-12-21 13:52:30 +00:00
[$c001] = [$c002]
2017-12-21 22:05:35 +00:00
[$c111.word] = [$c222]
[$c112.word] = [$c223.byte]
[$c222.word] = [$c333.word]
2017-12-23 13:36:23 +00:00
[$c333.word] = sin
2018-02-20 00:16:16 +00:00
[$c333.word] = &sin ; @todo not yet implemented
2017-12-21 13:52:30 +00:00
SC = 0
SC = 1
SC = false
2017-12-25 20:43:06 +00:00
SI = 1
SI = 0
SI = false
2017-12-21 13:52:30 +00:00
uninitbyte1 = 99
uninitbyte1 = 1.234
uninitbyte1 = '@'
initbyte1 = 99
initbyte1 = 1.234
initbyte1 = '@'
initbyte1 = A
2017-12-23 13:36:23 +00:00
initbyte1 = cbyte3
2017-12-21 13:52:30 +00:00
uninitword = 99
uninitword = 5.6778
uninitword = "test"
uninitword = '@'
uninitword = A
uninitword = XY
2017-12-23 13:36:23 +00:00
uninitword = ctext3
initword1 = cbyte3
initword1 = cword2
2017-12-21 13:52:30 +00:00
initfloat1 = 99
initfloat1 = 9.8765
initfloat1 = '@'
2017-12-23 13:36:23 +00:00
initfloat1 = cbyte3
initfloat1 = cword2
2017-12-21 13:52:30 +00:00
uninitfloat = 99
uninitfloat = 9.8765
uninitfloat = '@'
2017-12-23 13:36:23 +00:00
initword1 = sin
2018-02-20 00:16:16 +00:00
initword1 = &sin ; @todo not yet implemented
2018-01-21 17:17:39 +00:00
2017-12-23 13:36:23 +00:00
membyte1 = A
membyte1 = cbyte3
memword1 = A
memword1 = AX
memword1 = cbyte3
memword1 = cword2
memword1 = ctext3
2017-12-21 13:52:30 +00:00
membyte1 = 22
memword1 = 2233
memfloat = 3.4567
2017-12-23 13:36:23 +00:00
memword1 = sin
2018-02-20 00:16:16 +00:00
memword1 = &sin ; @todo not yet implemented
2017-12-21 13:52:30 +00:00
membyte1 = A
memword1 = A
memword1 = XY
2017-12-23 13:36:23 +00:00
memfloat = cbyte3
memfloat = cword2
2017-12-25 11:58:52 +00:00
; float assignments that require ROM functions from c64lib:
2017-12-25 01:29:14 +00:00
memfloat = Y
memfloat = XY
uninitfloat = Y
uninitfloat = XY
initfloat2 = Y
initfloat2 = XY
2017-12-25 11:58:52 +00:00
initfloat2 = initbyte2
initfloat2 = initword2
initfloat1 = uninitfloat
initfloat1 = initfloat2
2017-12-21 13:52:30 +00:00
return
}
~ footer {
XY = "text-immediate" ; reuses existing
AY = "text-immediate" ; reuses existing
AX = "another"
AX = ""
2018-01-13 22:49:57 +00:00
[$c000.word] = "another" ; must reuse string
[$c100.word] = "text-immediate" ; must reuse string
[$c200.word] = "" ; must reuse string
2018-01-14 23:20:36 +00:00
return
2017-12-21 13:52:30 +00:00
}