initial commit of code
This commit is contained in:
parent
b01218a94f
commit
2fbb0907eb
2
LICENSE
2
LICENSE
|
@ -1,6 +1,6 @@
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2021 The Industrious Rabbit
|
Copyright (c) 2021 John Bintz
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|
18
README.md
18
README.md
|
@ -1,2 +1,20 @@
|
||||||
# TheAutomaticProofreader-Decompiled
|
# TheAutomaticProofreader-Decompiled
|
||||||
|
|
||||||
A decompiled copy of The New Automatic Proofreader with comments
|
A decompiled copy of The New Automatic Proofreader with comments
|
||||||
|
|
||||||
|
## Decompile it yourself
|
||||||
|
|
||||||
|
### radare2
|
||||||
|
|
||||||
|
```
|
||||||
|
r2 -a6502 -m4443 ap_6502.prg
|
||||||
|
pD 166
|
||||||
|
```
|
||||||
|
|
||||||
|
### da65
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Ruby code is licensed MIT. The Automatic Proofreader code is not mine.
|
||||||
|
|
|
@ -0,0 +1,169 @@
|
||||||
|
; da65 V2.18 - Ubuntu 2.19-1
|
||||||
|
; Created: 2021-10-11 14:35:45
|
||||||
|
; Input file: ap_6502.prg
|
||||||
|
; Page: 1
|
||||||
|
|
||||||
|
|
||||||
|
.setcpu "6502"
|
||||||
|
|
||||||
|
L8956 := $8956
|
||||||
|
L9BD2 := $9BD2
|
||||||
|
LFFD2 := $FFD2
|
||||||
|
;; set interrupt, we can't be interrupted in this block
|
||||||
|
;; like a mutex
|
||||||
|
sei
|
||||||
|
;; patching in our own tokenizer routine to $0304
|
||||||
|
lda #$49
|
||||||
|
sta $0304
|
||||||
|
lda #$03
|
||||||
|
sta $0305
|
||||||
|
;; clear interrupt
|
||||||
|
cli
|
||||||
|
rts
|
||||||
|
|
||||||
|
;; start of our tokenizer
|
||||||
|
|
||||||
|
;; line number during GOSUB, GOTO, and RUN
|
||||||
|
;; $a7 and $a8 are RS-232 input stuff
|
||||||
|
lda $14
|
||||||
|
sta $A7
|
||||||
|
lda $15
|
||||||
|
sta $A8
|
||||||
|
|
||||||
|
;; $FF00: don't know what's here
|
||||||
|
lda #$00
|
||||||
|
sta $FF00
|
||||||
|
|
||||||
|
ldx #$1F
|
||||||
|
;; reverse mode switch + ...
|
||||||
|
;; some sort of setup?
|
||||||
|
make_text_reversed: lda $C7,x
|
||||||
|
sta $03E3,x
|
||||||
|
dex
|
||||||
|
bpl make_text_reversed
|
||||||
|
|
||||||
|
;; write #$13 (home), put cursor in upper left corner
|
||||||
|
lda #$13
|
||||||
|
jsr LFFD2
|
||||||
|
|
||||||
|
;; i don't know what this is
|
||||||
|
lda #$12
|
||||||
|
jsr L9BD2
|
||||||
|
|
||||||
|
;; some places to store data in zero page?
|
||||||
|
ldy #$00
|
||||||
|
|
||||||
|
;; b4 = current character index
|
||||||
|
sty $B4
|
||||||
|
|
||||||
|
;; b0 = are we in a quoted string
|
||||||
|
sty $B0
|
||||||
|
|
||||||
|
;; 0 -> 255
|
||||||
|
dey
|
||||||
|
process_character: inc $B4
|
||||||
|
|
||||||
|
;; 255 -> 0
|
||||||
|
;; y = current character position
|
||||||
|
next_character: iny
|
||||||
|
|
||||||
|
;; load a character from input buffer
|
||||||
|
;; where what you type goes before committing
|
||||||
|
lda $0200,y
|
||||||
|
|
||||||
|
;; if result is 0 (null), finish the line
|
||||||
|
beq done_with_line
|
||||||
|
cmp #$22
|
||||||
|
bne its_not_a_quote
|
||||||
|
|
||||||
|
;; push current character onto stack
|
||||||
|
pha
|
||||||
|
|
||||||
|
;; toggle are we in a string
|
||||||
|
lda $B0
|
||||||
|
eor #$FF
|
||||||
|
sta $B0
|
||||||
|
|
||||||
|
;; pull current character
|
||||||
|
pla
|
||||||
|
;; push character
|
||||||
|
its_not_a_quote: pha
|
||||||
|
;; is this character a space
|
||||||
|
;; spaces aren't significant unless we're in quotes
|
||||||
|
cmp #$20
|
||||||
|
;; no, keep going
|
||||||
|
bne count_this_character
|
||||||
|
;; are we in a quote
|
||||||
|
lda $B0
|
||||||
|
bne count_this_character
|
||||||
|
;; is the character in here a 0? then get the next character
|
||||||
|
pla
|
||||||
|
bne next_character
|
||||||
|
count_this_character: pla
|
||||||
|
;; load current char index
|
||||||
|
ldx $B4
|
||||||
|
repeatedly_process: clc
|
||||||
|
;; take the Character part...
|
||||||
|
lda $A7
|
||||||
|
;; load this character from input buffer
|
||||||
|
;; this can set the carry bit
|
||||||
|
;; so if this overflows, we want to know
|
||||||
|
adc $0200,y
|
||||||
|
;; store it in $a7
|
||||||
|
sta $A7
|
||||||
|
|
||||||
|
;; load a8
|
||||||
|
lda $A8
|
||||||
|
;; we put the # of overflows in here
|
||||||
|
adc #$00
|
||||||
|
sta $A8
|
||||||
|
|
||||||
|
;; count down number of times
|
||||||
|
dex
|
||||||
|
|
||||||
|
;; if not zero, keep going
|
||||||
|
bne repeatedly_process
|
||||||
|
;; if done, go to the next character
|
||||||
|
beq process_character
|
||||||
|
;; get the continually added char
|
||||||
|
done_with_line: lda $A7
|
||||||
|
;; xor it with the number of overflows
|
||||||
|
eor $A8
|
||||||
|
;; push it onto the stack
|
||||||
|
pha
|
||||||
|
;; take 0-15...
|
||||||
|
and #$0F
|
||||||
|
;; and stick it in y
|
||||||
|
tay
|
||||||
|
|
||||||
|
;; $03d3 is the end part of the data and defined what
|
||||||
|
;; characters there are
|
||||||
|
lda $03D3,y
|
||||||
|
;; print that character to the screen
|
||||||
|
jsr LFFD2
|
||||||
|
|
||||||
|
;; pull from the stack...
|
||||||
|
pla
|
||||||
|
;; shift it four bits to make it 0-15
|
||||||
|
lsr a
|
||||||
|
lsr a
|
||||||
|
lsr a
|
||||||
|
lsr a
|
||||||
|
;; and stick it in y
|
||||||
|
tay
|
||||||
|
|
||||||
|
;; same printing
|
||||||
|
lda $03D3,y
|
||||||
|
jsr LFFD2
|
||||||
|
|
||||||
|
ldx #$1F
|
||||||
|
reverse_it_again: lda $03E3,x
|
||||||
|
sta $C7,x
|
||||||
|
dex
|
||||||
|
bpl reverse_it_again
|
||||||
|
|
||||||
|
lda #$92
|
||||||
|
jsr LFFD2
|
||||||
|
|
||||||
|
;; run the original tokenizer
|
||||||
|
jmp L8956
|
|
@ -0,0 +1,9 @@
|
||||||
|
MEMORY {
|
||||||
|
MAIN: file=%O, start=%S, size=65536;
|
||||||
|
}
|
||||||
|
SEGMENTS {
|
||||||
|
CODE: load=MAIN, type=rw;
|
||||||
|
}
|
||||||
|
FEATURES {}
|
||||||
|
SYMBOLS {}
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,29 @@
|
||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
# the original one
|
||||||
|
|
||||||
|
DATA = [
|
||||||
|
169, 75, 141, 36, 3, 169, 3, 141,
|
||||||
|
37, 3, 169, 0, 133, 255, 96, 32,
|
||||||
|
14, 242, 133, 252, 134, 253, 132, 254,
|
||||||
|
8, 201, 13, 240, 17, 201, 32, 240,
|
||||||
|
5, 24, 101, 255, 133, 255, 165, 252,
|
||||||
|
166, 253, 164, 254, 40, 96, 169, 13,
|
||||||
|
32, 210, 255, 165, 214, 141, 165, 3,
|
||||||
|
206, 165, 3, 169, 0, 133, 216, 169,
|
||||||
|
19, 32, 210, 255, 169, 18, 32, 210,
|
||||||
|
255, 169, 58, 32, 210, 255, 166, 255,
|
||||||
|
169, 0, 32, 205, 221, 169, 0, 133,
|
||||||
|
255, 169, 32, 210, 255, 32, 210,
|
||||||
|
255, 173, 165, 3, 133, 214, 76, 98, 3
|
||||||
|
]
|
||||||
|
|
||||||
|
File.open('ap_orig_6502.prg', 'w') do |fh|
|
||||||
|
#fh.print (LOCATION & 0x255).chr
|
||||||
|
#fh.print ((LOCATION >> 8) & 0x255).chr
|
||||||
|
|
||||||
|
DATA.each do |i|
|
||||||
|
fh.print i.chr
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
Loading…
Reference in New Issue