Hacker News
Z80 REPL (2018)
131 points by adunk
ago
|
18 comments
flyinghamster
|next
[-]
The one thing I lamented about the Apple II Plus (vs. the original with Integer BASIC) was that to make room for autostart, they had to rip out the mini-assembler in the Monitor ROM. That was the closest thing I ever saw to an assembly-language REPL before this. At least they were able to keep the disassembler.
boomlinde
|root
|parent
|next
[-]
It's common in the C64 world to use freezer cartridges that allow you to interrupt normal operation and invoke a monitor program. These typically include rudimentary assemblers and disassemblers as well. Fun and useful for patching and reverse engineering!
Zeetah
|root
|parent
|next
[-]
The Atari 8-bit computers could have a similar capability by using a product called Omnimon. Great way to look inside programs.
boomlinde
|root
|parent
|previous
[-]
Btw, I've only had a rough idea of how these are actually implemented, non-maskable interrupt something-something, and never knew how they make sure that the interrupt vector points to some persistent routine that can invoke the monitor. I found this great article explaining at least how The Final Cartridge 3 does it (in the first two sections): https://www.pagetable.com/282
EvanAnderson
|root
|parent
|next
|previous
[-]
I remember being so confused, as a 10 y/o kid, trying to follow examples from an Apple II-era book on my public library's Apple IIe computers. I didn't understand why I couldn't get the mini assembler to work. The idea that features would be removed on future machines simply didn't occur to me. I guess I really didn't even understand that the IIe was a different machine than what the book was written for since most everything else worked as-expected.
kevin_thibedeau
|root
|parent
[-]
The mini-assembler was still available from Integer BASIC on II+ and IIe. It returned to ROM for later IIe models.
EvanAnderson
|root
|parent
[-]
It makes sense that I didn't find it. Integer BASIC didn't make sense to 10 y/o me, either. I'd started with Applesoft, since it was in ROM, and Integer BASIC seemed needless and strange. I also didn't understand why "FP" was the command to get into Applesoft.
(These are yet more examples of situations where, if I'd had a mentor, I think I would have gone much further at a younger age.)
abecedarius
|root
|parent
|next
|previous
[-]
I felt the same way.
There was another downside, that the Applesoft BASIC license gave Microsoft a hostage which they later used to kill https://en.wikipedia.org/wiki/MacBASIC. Hard to tell how much it mattered that the Mac came with no user programmability, which had been expected for PCs till then.
jottinger
|next
|previous
[-]
The source code for this is apparently 8 years old: https://github.com/abagames/z80-repl
With that said, I love the idea.
jhallenworld
|next
|previous
[-]
You should support symbols... For example, the monitor on my 6800 / 6809 Exorciser simulator has this (the "Offset at..." is printed when it fixes forward references):
~/exorsim$ exor -d
% a 1000
1000: start bra skip
1002: nop
1003: nop
1004: skip ldx #10
Offset at 1001 set to 02
1007: loop dex
1008: nop
1009: bne loop
100b: rts
100c:
% sy
1007 loop
1004 skip
1000 start
% u 1000
1000: 20 02 BRA $1004
1002: 01 NOP
1003: 01 NOP
1004: CE 00 0A LDX #$000A
1007: 09 DEX
1008: 01 NOP
1009: 26 FC BNE $1007
100B: 39 RTS
What would be even better: "a" brings up a built-in mini-editor. When you exit, the code is assembled.
networked
|next
|previous
[-]
Cool idea! The REPL needs to handle whitespace after an instruction with no operands:
> ld c,20h
0E 20 (7 cycles)
> ld c,20h [<-- trailing space here]
0E 20 (7 cycles)
> nop
00 (4 cycles)
> nop [<-- trailing space here]
unknown instruction: nop
I also wish I could select from the completion list with Tab without typing more of the instruction, fish-style. I.e., you press Tab to go through completion 1, completion 2, ..., completion N, completion 1 again with Enter to confirm your pick.
torutofu
|next
|previous
[-]
the fun part is how fast you can get back into Z80 muscle memory once the repl is giving you immediate feedback