shell: support loading 128x128px images
I'm loading them in uncompressed ASCII format, and all streams and gap buffers all over the place need to get massively scaled up to 256KB capacity. But the tests don't yet run out of RAM, so I'll keep going.
This commit is contained in:
parent
e2f18e8866
commit
fc951149a0
|
@ -950,11 +950,11 @@ fn word-at-cursor _self: (addr environment), out: (addr stream byte) {
|
||||||
fn load-state _self: (addr environment), data-disk: (addr disk) {
|
fn load-state _self: (addr environment), data-disk: (addr disk) {
|
||||||
var self/esi: (addr environment) <- copy _self
|
var self/esi: (addr environment) <- copy _self
|
||||||
# data-disk -> stream
|
# data-disk -> stream
|
||||||
var s-storage: (stream byte 0x2000) # space for 16/sectors
|
var s-storage: (stream byte 0x40000) # space for 0x200/sectors
|
||||||
var s/ebx: (addr stream byte) <- address s-storage
|
var s/ebx: (addr stream byte) <- address s-storage
|
||||||
draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, "loading sectors from data disk", 3/fg, 0/bg
|
draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, "loading sectors from data disk", 3/fg, 0/bg
|
||||||
move-cursor-to-left-margin-of-next-line 0/screen
|
move-cursor-to-left-margin-of-next-line 0/screen
|
||||||
load-sectors data-disk, 0/lba, 0x10/sectors, s
|
load-sectors data-disk, 0/lba, 0x200/sectors, s
|
||||||
#? draw-stream-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, s, 7/fg, 0xc5/bg=blue-bg
|
#? draw-stream-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, s, 7/fg, 0xc5/bg=blue-bg
|
||||||
# stream -> gap-buffer (HACK: we temporarily cannibalize the sandbox's gap-buffer)
|
# stream -> gap-buffer (HACK: we temporarily cannibalize the sandbox's gap-buffer)
|
||||||
draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, "parsing", 3/fg, 0/bg
|
draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, "parsing", 3/fg, 0/bg
|
||||||
|
@ -1034,11 +1034,11 @@ fn store-state data-disk: (addr disk), sandbox: (addr sandbox), globals: (addr g
|
||||||
break-if-!=
|
break-if-!=
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var stream-storage: (stream byte 0x2000) # space enough for 16/sectors
|
var stream-storage: (stream byte 0x40000) # space enough for 0x200/sectors
|
||||||
var stream/edi: (addr stream byte) <- address stream-storage
|
var stream/edi: (addr stream byte) <- address stream-storage
|
||||||
write stream, "(\n"
|
write stream, "(\n"
|
||||||
write-globals stream, globals
|
write-globals stream, globals
|
||||||
write-sandbox stream, sandbox
|
write-sandbox stream, sandbox
|
||||||
write stream, ")\n"
|
write stream, ")\n"
|
||||||
store-sectors data-disk, 0/lba, 0x10/sectors, stream
|
store-sectors data-disk, 0/lba, 0x200/sectors, stream
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,7 +57,7 @@ fn load-globals in: (addr handle cell), self: (addr global-table) {
|
||||||
var value-gap-buffer-ah/edi: (addr handle gap-buffer) <- address value-gap-buffer-storage
|
var value-gap-buffer-ah/edi: (addr handle gap-buffer) <- address value-gap-buffer-storage
|
||||||
allocate value-gap-buffer-ah
|
allocate value-gap-buffer-ah
|
||||||
var value-gap-buffer/eax: (addr gap-buffer) <- lookup *value-gap-buffer-ah
|
var value-gap-buffer/eax: (addr gap-buffer) <- lookup *value-gap-buffer-ah
|
||||||
initialize-gap-buffer value-gap-buffer, 0x1000/4KB
|
initialize-gap-buffer value-gap-buffer, 0x40000/256KB
|
||||||
load-gap-buffer-from-stream value-gap-buffer, value-data
|
load-gap-buffer-from-stream value-gap-buffer, value-data
|
||||||
load-lexical-scope value-gap-buffer-ah, self
|
load-lexical-scope value-gap-buffer-ah, self
|
||||||
loop
|
loop
|
||||||
|
|
|
@ -267,7 +267,7 @@ fn parse-atom _curr-token: (addr token), _out: (addr handle cell), trace: (addr
|
||||||
compare should-trace?, 0/false
|
compare should-trace?, 0/false
|
||||||
}
|
}
|
||||||
break-if-=
|
break-if-=
|
||||||
var stream-storage: (stream byte 0x400)
|
var stream-storage: (stream byte 0x40000)
|
||||||
var stream/ecx: (addr stream byte) <- address stream-storage
|
var stream/ecx: (addr stream byte) <- address stream-storage
|
||||||
write stream, "=> symbol "
|
write stream, "=> symbol "
|
||||||
var nested-trace-storage: trace
|
var nested-trace-storage: trace
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
fn read-cell in: (addr gap-buffer), out: (addr handle cell), trace: (addr trace) {
|
fn read-cell in: (addr gap-buffer), out: (addr handle cell), trace: (addr trace) {
|
||||||
# eagerly tokenize everything so that the phases are easier to see in the trace
|
# eagerly tokenize everything so that the phases are easier to see in the trace
|
||||||
var tokens-storage: (stream token 0x400)
|
var tokens-storage: (stream token 0x10000)
|
||||||
var tokens/edx: (addr stream token) <- address tokens-storage
|
var tokens/edx: (addr stream token) <- address tokens-storage
|
||||||
tokenize in, tokens, trace
|
tokenize in, tokens, trace
|
||||||
var error?/eax: boolean <- has-errors? trace
|
var error?/eax: boolean <- has-errors? trace
|
||||||
|
@ -10,7 +10,7 @@ fn read-cell in: (addr gap-buffer), out: (addr handle cell), trace: (addr trace)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
# insert more parens based on indentation
|
# insert more parens based on indentation
|
||||||
var parenthesized-tokens-storage: (stream token 0x400)
|
var parenthesized-tokens-storage: (stream token 0x10000)
|
||||||
var parenthesized-tokens/ecx: (addr stream token) <- address parenthesized-tokens-storage
|
var parenthesized-tokens/ecx: (addr stream token) <- address parenthesized-tokens-storage
|
||||||
parenthesize tokens, parenthesized-tokens, trace
|
parenthesize tokens, parenthesized-tokens, trace
|
||||||
var error?/eax: boolean <- has-errors? trace
|
var error?/eax: boolean <- has-errors? trace
|
||||||
|
|
|
@ -14,7 +14,7 @@ fn initialize-sandbox _self: (addr sandbox), fake-screen-width: int, fake-screen
|
||||||
var data-ah/eax: (addr handle gap-buffer) <- get self, data
|
var data-ah/eax: (addr handle gap-buffer) <- get self, data
|
||||||
allocate data-ah
|
allocate data-ah
|
||||||
var data/eax: (addr gap-buffer) <- lookup *data-ah
|
var data/eax: (addr gap-buffer) <- lookup *data-ah
|
||||||
initialize-gap-buffer data, 0x2000/default-gap-buffer-size=8KB
|
initialize-gap-buffer data, 0x40000/default-gap-buffer-size=256KB
|
||||||
#
|
#
|
||||||
var value-ah/eax: (addr handle stream byte) <- get self, value
|
var value-ah/eax: (addr handle stream byte) <- get self, value
|
||||||
populate-stream value-ah, 0x1000/4KB
|
populate-stream value-ah, 0x1000/4KB
|
||||||
|
|
|
@ -724,7 +724,7 @@ fn next-balanced-stream-token in: (addr gap-buffer), _out: (addr token), trace:
|
||||||
var bracket-count: int
|
var bracket-count: int
|
||||||
# stream tokens contain whole function definitions on boot, so we always
|
# stream tokens contain whole function definitions on boot, so we always
|
||||||
# give them plenty of space
|
# give them plenty of space
|
||||||
populate-stream out-data-ah, 0x400/max-definition-size=1KB
|
populate-stream out-data-ah, 0x40000/max-definition-size=256KB
|
||||||
var _out-data/eax: (addr stream byte) <- lookup *out-data-ah
|
var _out-data/eax: (addr stream byte) <- lookup *out-data-ah
|
||||||
var out-data/edi: (addr stream byte) <- copy _out-data
|
var out-data/edi: (addr stream byte) <- copy _out-data
|
||||||
$next-balanced-stream-token:loop: {
|
$next-balanced-stream-token:loop: {
|
||||||
|
|
Loading…
Reference in New Issue