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:
Kartik K. Agaram 2021-07-28 23:54:32 -07:00
parent e2f18e8866
commit fc951149a0
6 changed files with 10 additions and 10 deletions

View File

@ -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
} }

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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: {