next version

This commit is contained in:
Irmen de Jong 2023-11-14 18:23:37 +01:00
parent aa949165c7
commit 159f80d629
4 changed files with 18 additions and 124 deletions

View File

@ -2,6 +2,11 @@
TODO
====
- palette: mnore accurate conversion to 4 bit colorspage in set_rgb8, by doing (x * 15 + 135) >> 8, see https://threadlocalmutex.com/?p=48
- fix the compiler crash on s1[n+1] = s1[2] where s1 is a subroutine param (regular variable works)
- improve the working of %option merge: should be able to merge your own stuff into say textio. , and improve the docs about it too.
- give error when using %option merge in module scope.
- [on branch: shortcircuit] investigate McCarthy evaluation again? this may also reduce code size perhaps for things like if a>4 or a<2 ....
- [on branch: ir-less-branch-opcodes] IR: reduce the number of branch instructions such as BEQ, BEQR, etc (gradually), replace with CMP(I) + status branch instruction
- IR: reduce amount of CMP/CMPI after instructions that set the status bits correctly (LOADs? INC? Bitwise operations, etc), but only after setting the status bits is verified!

View File

@ -7,7 +7,7 @@
- simple file format with few special cases.
- no random access, only sequential reading/streaming.
- simple user code that doesn't have to bother with the I/O at all.
- a few chunk typs that can be handled automatically to load data into system ram, banked ram, or video ram.
- a few chunk types that can be handled automatically to load data into system ram, banked ram, or video ram.
- custom chunk types for flexibility or extensibility.
Theoretical optimal chunk size is 512 bytes but actual size may be different. (In practice there seems to be no significant speed impact)

View File

@ -1,129 +1,18 @@
%option no_sysinit
%import textio
%import diskio
%import string
%zeropage basicsafe
main {
sub start() {
str filename = "doesnotexist.xyz"
ubyte status
txt.print("read open...\n")
if diskio.f_open(filename) {
status = cbm.READST()
txt.print("open ok - wrong! status=")
} else {
status = cbm.READST()
txt.print("open failed - good! status=")
}
txt.print_ub(status)
txt.nl()
txt.print(diskio.status())
txt.nl()
txt.print("\nwriting the file\n")
if diskio.f_open_w(filename) {
cx16.r0 = diskio.status()
if @(cx16.r0)=='0' {
diskio.f_write("test", 4)
diskio.f_close_w()
status = cbm.READST()
txt.print("write ok! good! status=\n")
} else {
txt.print("write open error, status=")
txt.print(cx16.r0)
txt.nl()
}
} else {
status = cbm.READST()
txt.print("write open failed! wrong! status=\n")
}
txt.print_ub(status)
txt.nl()
txt.print(diskio.status())
txt.nl()
txt.print("\nread open...\n")
if diskio.f_open(filename) {
status = cbm.READST()
txt.print("open ok - good! status=")
} else {
status = cbm.READST()
txt.print("open failed - wrong! status=")
}
txt.print_ub(status)
txt.nl()
txt.print(diskio.status())
txt.nl()
}
}
main33 {
sub print_buffer() {
uword ptr = $4000
uword firstAA = ptr
repeat 320*6 {
txt.print_ubhex(@(ptr), false)
if @(ptr)==$aa {
firstAA = ptr
break
}
ptr++
}
txt.nl()
txt.print("first $aa is at ")
txt.print_uwhex(firstAA, true)
txt.print(" = offset ")
txt.print_uw(firstAA-$4000)
txt.nl()
}
sub start() {
uword buffer = $4000
sys.memset(buffer, 2000, $aa)
print_buffer()
void cx16.screen_mode($80, false) ; 320*240 * 256C
cx16.FB_cursor_position(0, 0)
cx16.FB_get_pixels($4000, 256)
void cx16.screen_mode(0, false) ; 320*240 * 256C
print_buffer()
repeat { }
void cx16.screen_mode($80, false) ; 320*240 * 256C
;; cx16.mouse_config2(1)
cx16.FB_cursor_position(0, 0)
cx16.FB_set_pixels(0, 320*4)
; expected result: exactly 12 rows of 320 pixels written
; actual result: almost 13 rows of pixels written.
repeat {}
; sys.wait(9999)
;
; ; this works:
; ubyte y
; for y in 0 to 239 step 24 {
; cx16.FB_cursor_position(0, y)
; cx16.FB_set_pixels(0, 320*24)
; }
; sys.wait(120)
;
; ; this works too:
; cx16.FB_cursor_position(0,0)
; repeat 240 cx16.FB_set_pixels(0, 320)
; sys.wait(120)
;
; ; this kills the mouse pointer because it writes past the bitmap screen data
; ; expected is to write 10 times 24 rows = 240 rows of pixels, exactly 1 screen...
; cx16.FB_cursor_position(0,0)
; unroll 10 cx16.FB_set_pixels(0, 320*24)
;
; repeat {}
cat("aaaaa")
}
sub cat(str s1) {
str s2 = "three"
ubyte n=2
; s1[n+1] = s1[2] ; TODO compiler crash
s2[n+1] = s2[2] ; works fine
}
}

View File

@ -5,4 +5,4 @@ org.gradle.daemon=true
kotlin.code.style=official
javaVersion=11
kotlinVersion=1.9.20
version=9.6
version=9.7-SNAPSHOT