blob: d04fe7fbe18d9ea3a017b567892abbc2b51d4d19 (
plain)
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
.export init
numL := $02 ; low byte of a 16-bit number
numH := $03 ; low byte of a 16-bit number
key_buf_len := $c6
key_buf := $0277
; initialisation: clear screen and set num to point to screen mem start
init:
jsr clear_screen
ldy #$00
lda #$04
sta numH
lda #$00
sta numL
jmp loop
; main loop
loop:
; clear keyboard buffer; otherwise program will always think a key is pressed
lda #$00
sta key_buf_len
jsr key_wait
lda key_buf
jsr print_byte
;pha
;lda #1
;jsr a16b
;pla
inc numL
beq inc_H
jmp dinc_H
inc_H:
inc numH
dinc_H:
cmp #$30
bne loop
jmp end
; loops until keyboard buffer has any number of characters in it
key_wait:
; init: pha to retrieve before rts, to keep A intact
pha
key_wait_loop:
lda key_buf_len ; shows how many keys are in key buffer
cmp #$00
beq key_wait_loop
pla
rts
; clear the screen by filling it with spaces
; destroys: A, Y, numL & numH (in memory)
clear_screen:
; init: y = 0 because you can't use indirect addressing without a register,
; load start of screen memory into numL/numH
ldy #0
lda #$04
sta numH
lda #$00
sta numL
jmp cs_loop
; add 1 to high bit, return if $08 (screen mem only goes to $07ff)
add_carry:
inc numH
lda numH
cmp #$08
bne cs_loop
rts
; store a space in current screen mem address as specified by num, branch if
; number overflows to 0 (i.e. add 1 to high bit of 16 bit number)
cs_loop:
lda #$20
sta (numL),y
inc numL
beq add_carry
jmp cs_loop
; print byte in A at location in num
print_byte:
; init: store original A in X and push Y to stack
tax
tya
pha
txa
ldy #$00
sbc #$40 ; convert (very vaguely) to c64 screen codes
sta (numL),y
; deinit: pull Y from stack and transfer original A from X to A
pla
tay
txa
rts
; adds A to num (16 bit) (NOT WORKING)
; destroys: X
a16b:
pha
tsx
lda numL
adc $0100,x
sta numL
bcs a16b_carry
jmp a16b_end
a16b_carry:
inc numH
a16b_end:
clc
pla
rts
end:
brk
|