Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Acquire device numbers
- hwn I
- :map_devices
- hwq i
- ife b, 0x7349
- ife a, 0xf615
- set [monitor], i
- ife b, 0x30cf
- ife a, 0x7406
- set [keyboard], i
- sub i, 1
- ifn i, 0
- set pc, map_devices
- ; Map monitor video ram
- set a, 0x0
- set b, [moni_ram_start]
- hwi [monitor]
- ; Draw intro
- set x, msg_start
- set y, [moni_ram_start]
- set z, 0x1e0
- jsr drawstr
- ; Keyboard loop
- set a, 0x1
- set i, [cmd_buf] ; Command buffer index
- set j, [moni_ram_start] ; Video RAM index
- add j, 0x20 ; Offset for welcome message
- set [j], 0xf0fc ; Draw cursor at start
- :loop
- hwi [keyboard]
- ife c, 0x0
- set pc, loop
- ife c, 0x10
- set pc, backspace
- ife c, 0x11
- set pc, linebreak
- set [i], c ; Write to command buffer
- set z, 0xf000 ; Formatting helper variable
- add z, c ; Format
- set [j], z ; Write to video RAM
- ; Update indexes
- add i, 0x1
- add j, 0x1
- set [j], 0xf0fc ; Draw cursor
- set pc, loop
- :backspace
- ife j, [bs_limit]
- set pc, loop
- set [j], 0x0 ; Delete cursor at current location
- ; Decrement indexes
- sub i, 0x1
- sub j, 0x1
- set [j], 0xf0fc ; Draw cursor
- set [i], 0x0 ; Delete buffer token
- set pc, loop
- :linebreak
- set [j], 0x0
- set x, j
- sub x, [moni_ram_start]
- :linebreakloop
- add j, 0x1
- add x, 0x1
- set [j], 0xf0fc
- mod x, 0x20
- ifn x, 0x0
- set pc, linebreakloop
- set a, [cmd_buf]
- set b, cmdstr_version
- jsr cmpstr
- ife z, 0x1
- jsr tell_version
- set [j], 0xf0fc
- set pc, loop
- :tell_version
- set x, msg_version
- set y, j
- set z, 0x1e0
- jsr drawstr
- set pc, pop
- ; Functions
- ; Write string from X to Y using formatting Z (bbbbffff_)
- :drawstr
- set push, a
- shl z, 0x7
- :drawstr_loop
- set a, [x]
- add a, z
- set [y], a
- add x, 0x1
- add y, 0x1
- ifn [x], 0x0
- set pc, drawstr_loop
- set a, pop
- set pc, pop
- ; If strings starting at X and Y are equal, set Z to 0x1, otherwise 0x0
- :cmpstr
- set z, 0x1
- :cmpstr_loop
- ifn [x], [y]
- set pc, cmpstr_break
- add x, 0x1
- add y, 0x1
- ifn x, 0x0
- ifn y, 0x0
- set pc, cmpstr_loop
- set pc, pop
- :cmpstr_break
- set z, 0x0
- set pc, pop
- ; Data
- :monitor dat 0x0
- :moni_ram_start dat 0x1f40
- :keyboard dat 0x0
- :cmd_buf dat 0x1b58
- :bs_limit dat 0x1F60
- :msg_start dat "Welcome to Shizuku.", 0x0
- :cmdstr_version dat "version", 0x0
- :msg_version dat "Version 0.1 Alpha", 0x0
Advertisement
Add Comment
Please, Sign In to add comment