summaryrefslogtreecommitdiff
path: root/roms
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2020-12-03 19:03:08 +0100
committerAndreas Baumann <mail@andreasbaumann.cc>2020-12-03 19:03:08 +0100
commitc40499b83f238de9b1a88a080261546149784586 (patch)
tree0baf7b5dee58d2929cd43000a0b0782e68e0d847 /roms
parentc7b0b280339064ab1b673ab7767d0318b2e9b72a (diff)
download6502-c40499b83f238de9b1a88a080261546149784586.tar.gz
6502-c40499b83f238de9b1a88a080261546149784586.tar.bz2
some more opcodes for delay 7-seg example
Diffstat (limited to 'roms')
-rw-r--r--roms/7seg_print_loop_delay.asm90
-rw-r--r--roms/7seg_print_one_subroutine.asm6
2 files changed, 93 insertions, 3 deletions
diff --git a/roms/7seg_print_loop_delay.asm b/roms/7seg_print_loop_delay.asm
new file mode 100644
index 0000000..82ec4db
--- /dev/null
+++ b/roms/7seg_print_loop_delay.asm
@@ -0,0 +1,90 @@
+PORTA = $6001
+DDRA = $6003
+
+SER = %00000001
+RCLK = %00000010
+SRCLK = %00000100
+
+COUNTER = $0
+
+ .org #$f800
+
+reset:
+ ldx #$FF ; initialize call stack to $1FF
+ txs
+
+ ldx #%00000111 ; set output on 7seg control pins of PORTA
+ stx DDRA
+
+ ldx #$0 ; initialize 8-bit counter
+ stx COUNTER
+
+mainloop: ; main loop, load counter and print it
+ jsr print7seg
+ ldx #0 ; ca 500'000 cycles, at 1 Mhz 2 ticks per second
+ ldy #0
+ lda #150
+ jsr delay
+ inc COUNTER
+ lda COUNTER
+ jmp mainloop
+
+print7seg:
+ ldy #$8 ; 8 bits to shift
+loop7seg:
+ rol a
+ bcc zerobit ; C=0, bang a zero to SER
+onebit:
+ ldx #(SER) ; C=1, bang a one to SER
+ stx PORTA
+ ldx #(SER | SRCLK)
+ stx PORTA
+ ldx #(SER)
+ stx PORTA
+ jmp next
+zerobit:
+ ldx #$0 ; C=0, bang a zero to SER
+ stx PORTA
+ ldx #SRCLK
+ stx PORTA
+ ldx #$0
+ stx PORTA
+ jmp next
+next:
+ dey
+ bne loop7seg
+ rol a ; restore A register
+output:
+ ldx #0 ; bang RCLK to store output in latch
+ stx PORTA
+ ldx #RCLK
+ stx PORTA
+ ldx #0
+ stx PORTA
+ rts
+
+; delay 18+13(65536Y+256A+X) cycles
+delay:
+ iny
+delay1:
+ nop
+ nop
+delay2:
+ cpx #$1
+ dex
+ sbc #$0
+ bcs delay1
+ dey
+ bne delay2
+ rts
+
+nmi:
+ rti
+
+irq:
+ rti
+
+ .org #$fffa
+ .word nmi
+ .word reset
+ .word irq
diff --git a/roms/7seg_print_one_subroutine.asm b/roms/7seg_print_one_subroutine.asm
index 4a1839f..2310e02 100644
--- a/roms/7seg_print_one_subroutine.asm
+++ b/roms/7seg_print_one_subroutine.asm
@@ -17,6 +17,9 @@ reset:
lda #$a5 ; 10100101, data to show
jsr print7seg
+term:
+ jmp term
+
print7seg:
ldy #$8 ; 8 bits to shift
loop:
@@ -51,9 +54,6 @@ output:
stx PORTA
rts
-term:
- jmp term
-
nmi:
rti