-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgetchar.asm
95 lines (95 loc) · 1.56 KB
/
getchar.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
; uint : return_address_1 : $0334 (820)
; uint : return_address_2 : $0335 (821)
; uint : c : $0336 (822)
.org $0834
LDA #$00; 0834
STA $0336; ; 0836
JSR $FFE4; 0839
STA $0336; 083C
PHA; 083F
LBL1L0:
LBL1L1: ; Top of WHILE Loop
LDA $0336; 0840
CMP #$0D; 0843
.BYTE #$D0, #$03; 0845
JMP LBL1L3; if z==1 jump to ELSE; 0847
LBL1L2:
JSR $FFE4; 084A
STA $0336; 084D
LBL2L0:
LDA $0336; 0850
CMP #$00; 0853
.BYTE #$B0, #$03; 0855
JMP LBL2L2; if c==0 jump to ELSE; 0857
.BYTE #$D0, #$03; 085A
JMP LBL2L2; if z==1 jump to ELSE; 085C
LBL2L1:
LDA $0336; 085F
PHA; 0862
JSR BYTE2HEX; 0863
LDA #$08; 0866
STA $03; 0868
LDA #$C9; 086A
STA $02; 086C
JSR PRN; 086E
JMP LBL2L3; 0871
LBL2L2:
LBL2L3:
JMP LBL1L1; jump to top of FOR; 0874
LBL1L3:
PLA; 0877
LDA #$08; 0878
STA $03; 087A
LDA #$CB; 087C
STA $02; 087E
JSR PRN; 0880
RTS; 0883
BYTE2HEX: ;Display a Hexadecimal Byte
PLA; 0884
STA $0334; 0885
PLA; 0888
STA $0335; 0889
CLD; 088C
PLA; 088D
TAX; 088E
AND #$F0; 088F
LSR; 0891
LSR; 0892
LSR; 0893
LSR; 0894
CMP #$0A; 0895
.BYTE #$90, #$03; 0897
CLC; 0899
ADC #$07; 089A
ADC #$30; 089C
JSR $FFD2; 089E
TXA; 08A1
AND #$0F; 08A2
CMP #$0A; 08A4
.BYTE #$90, #$03; 08A6
CLC; 08A8
ADC #$07; 08A9
ADC #$30; 08AB
JSR $FFD2; 08AD
LDA $0335; 08B0
PHA; 08B3
LDA $0334; 08B4
PHA; 08B7
RTS; 08B8
PRN:
LDY #$00; 08B9
PRN_LOOP:
LDA ($02),Y; 08BB
CMP #$00; 08BD
BEQ PRN_END; 08BF
JSR $FFD2; 08C1
INY; 08C4
JMP PRN_LOOP; 08C5
PRN_END:
RTS; 08C8
; $8c9 " "
STRLBL0:
.BYTE #$20, #$00
; $8cb "DONE\n"
STRLBL1:
.BYTE #$44, #$4F, #$4E, #$45, #$0D, #$00