mirror of
https://github.com/irmen/prog8.git
synced 2024-09-28 17:54:58 +00:00
next version
This commit is contained in:
parent
aa949165c7
commit
159f80d629
@ -2,6 +2,11 @@
|
|||||||
TODO
|
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: 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
|
- [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!
|
- 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!
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
- simple file format with few special cases.
|
- simple file format with few special cases.
|
||||||
- no random access, only sequential reading/streaming.
|
- no random access, only sequential reading/streaming.
|
||||||
- simple user code that doesn't have to bother with the I/O at all.
|
- 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.
|
- 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)
|
Theoretical optimal chunk size is 512 bytes but actual size may be different. (In practice there seems to be no significant speed impact)
|
||||||
|
133
examples/test.p8
133
examples/test.p8
@ -1,129 +1,18 @@
|
|||||||
%option no_sysinit
|
%import string
|
||||||
%import textio
|
|
||||||
%import diskio
|
|
||||||
%zeropage basicsafe
|
%zeropage basicsafe
|
||||||
|
|
||||||
main {
|
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() {
|
sub start() {
|
||||||
uword buffer = $4000
|
cat("aaaaa")
|
||||||
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 {}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -5,4 +5,4 @@ org.gradle.daemon=true
|
|||||||
kotlin.code.style=official
|
kotlin.code.style=official
|
||||||
javaVersion=11
|
javaVersion=11
|
||||||
kotlinVersion=1.9.20
|
kotlinVersion=1.9.20
|
||||||
version=9.6
|
version=9.7-SNAPSHOT
|
||||||
|
Loading…
Reference in New Issue
Block a user