initial
This commit is contained in:
120
build/boot.lst
Normal file
120
build/boot.lst
Normal file
@@ -0,0 +1,120 @@
|
||||
0000FFFF 1 STACK_TOP = 0xFFFF
|
||||
2 ; At 500 kHz the CPU has about 500 T-states per millisecond.
|
||||
3 ; The inner delay loop below costs about 26 T-states per taken iteration:
|
||||
4 ; dec hl = 6T
|
||||
5 ; ld a,h = 4T
|
||||
6 ; or l = 4T
|
||||
7 ; jr nz = 12T
|
||||
8 ; 500 / 26 = 19.2, so 20 iterations is the nearest simple whole-number choice.
|
||||
00000014 9 DELAY_LOOPS_PER_MS = 20
|
||||
10
|
||||
11 .globl _main
|
||||
12 .globl _delay_ms
|
||||
13 .globl _io_out
|
||||
14 .globl _io_in
|
||||
15 .globl s__DATA
|
||||
16 .globl l__DATA
|
||||
17 .globl s__INITIALIZER
|
||||
18 .globl s__INITIALIZED
|
||||
19 .globl l__INITIALIZER
|
||||
20
|
||||
21 .area _ITABLE (ABS)
|
||||
22
|
||||
00000000 23 .org 0x00
|
||||
00000000 C3r00r00 [10] 24 jp init
|
||||
00000008 25 .org 0x08
|
||||
00000008 ED 4D [14] 26 reti
|
||||
00000010 27 .org 0x10
|
||||
00000010 ED 4D [14] 28 reti
|
||||
00000018 29 .org 0x18
|
||||
00000018 ED 4D [14] 30 reti
|
||||
00000020 31 .org 0x20
|
||||
00000020 ED 4D [14] 32 reti
|
||||
00000028 33 .org 0x28
|
||||
00000028 ED 4D [14] 34 reti
|
||||
00000030 35 .org 0x30
|
||||
00000030 ED 4D [14] 36 reti
|
||||
00000038 37 .org 0x38
|
||||
00000038 ED 4D [14] 38 reti
|
||||
39
|
||||
40 .area _HOME
|
||||
00000000 41 init:
|
||||
00000000 F3 [ 4] 42 di
|
||||
00000001 31 FF FF [10] 43 ld sp, #STACK_TOP
|
||||
44
|
||||
00000004 CDr00r00 [17] 45 call gsinit
|
||||
00000007 CDr00r00 [17] 46 call _main
|
||||
47
|
||||
0000000A 48 hang:
|
||||
0000000A 18 FE [12] 49 jr hang
|
||||
50
|
||||
51 .area _GSINIT
|
||||
00000000 52 gsinit:
|
||||
00000000 01r00r00 [10] 53 ld bc, #l__INITIALIZER
|
||||
00000003 78 [ 4] 54 ld a, b
|
||||
00000004 B1 [ 4] 55 or c
|
||||
00000005 28 08 [12] 56 jr z, zero_data
|
||||
57
|
||||
00000007 11r00r00 [10] 58 ld de, #s__INITIALIZED
|
||||
0000000A 21r00r00 [10] 59 ld hl, #s__INITIALIZER
|
||||
0000000D ED B0 [21] 60 ldir
|
||||
61
|
||||
0000000F 62 zero_data:
|
||||
0000000F 01r00r00 [10] 63 ld bc, #l__DATA
|
||||
00000012 78 [ 4] 64 ld a, b
|
||||
00000013 B1 [ 4] 65 or c
|
||||
00000014 28 0B [12] 66 jr z, gsinit_done
|
||||
67
|
||||
00000016 21r00r00 [10] 68 ld hl, #s__DATA
|
||||
00000019 AF [ 4] 69 xor a
|
||||
70
|
||||
0000001A 71 clear_loop:
|
||||
0000001A 77 [ 7] 72 ld (hl), a
|
||||
0000001B 23 [ 6] 73 inc hl
|
||||
0000001C 0B [ 6] 74 dec bc
|
||||
0000001D 78 [ 4] 75 ld a, b
|
||||
0000001E B1 [ 4] 76 or c
|
||||
0000001F 20 F9 [12] 77 jr nz, clear_loop
|
||||
78
|
||||
00000021 79 gsinit_done:
|
||||
80 .area _GSFINAL
|
||||
00000000 C9 [10] 81 ret
|
||||
82
|
||||
83 .area _CODE
|
||||
84 ; Write a byte to an I/O port.
|
||||
85 ; Input: A = port address, L = data byte.
|
||||
00000000 86 _io_out::
|
||||
00000000 4F [ 4] 87 ld c, a
|
||||
00000001 7D [ 4] 88 ld a, l
|
||||
00000002 ED 79 [12] 89 out (c), a
|
||||
00000004 C9 [10] 90 ret
|
||||
91
|
||||
92 ; Read a byte from an I/O port.
|
||||
93 ; Input: A = port address.
|
||||
94 ; Return: A = data byte.
|
||||
00000005 95 _io_in::
|
||||
00000005 4F [ 4] 96 ld c, a
|
||||
00000006 ED 78 [12] 97 in a, (c)
|
||||
00000008 C9 [10] 98 ret
|
||||
99
|
||||
100 ; Approximate millisecond delay.
|
||||
101 ; Input: HL = delay in milliseconds.
|
||||
102 ; For CLK_SPEED = 500000 Hz this uses 20 inner iterations per ms.
|
||||
00000009 103 _delay_ms::
|
||||
00000009 7C [ 4] 104 ld a, h
|
||||
0000000A B5 [ 4] 105 or l
|
||||
0000000B C8 [11] 106 ret z
|
||||
0000000C 107 delay_ms_outer$:
|
||||
0000000C E5 [11] 108 push hl
|
||||
0000000D 21 14 00 [10] 109 ld hl, #DELAY_LOOPS_PER_MS
|
||||
00000010 110 delay_ms_inner$:
|
||||
00000010 2B [ 6] 111 dec hl
|
||||
00000011 7C [ 4] 112 ld a, h
|
||||
00000012 B5 [ 4] 113 or l
|
||||
00000013 20 FB [12] 114 jr nz, delay_ms_inner$
|
||||
00000015 E1 [10] 115 pop hl
|
||||
00000016 2B [ 6] 116 dec hl
|
||||
00000017 7C [ 4] 117 ld a, h
|
||||
00000018 B5 [ 4] 118 or l
|
||||
00000019 20 F1 [12] 119 jr nz, delay_ms_outer$
|
||||
0000001B C9 [10] 120 ret
|
||||
Reference in New Issue
Block a user