33 lines
1.3 KiB
Z80 Assembly
33 lines
1.3 KiB
Z80 Assembly
align 8 ;aligns "Days_Of_The_Week" to the next 256-byte boundary. The low byte of "Sunday" will be at memory location &XX00.
|
|
;this simplifies the lookup process significantly.
|
|
Days_Of_The_Week:
|
|
word Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday
|
|
|
|
Sunday:
|
|
byte "Sunday",0
|
|
Monday:
|
|
byte "Monday",0
|
|
Tuesday:
|
|
byte "Tuesday",0
|
|
Wednesday:
|
|
byte "Wednesday",0
|
|
Thursday:
|
|
byte "Thursday",0
|
|
Friday:
|
|
byte "Friday",0
|
|
Saturday:
|
|
byte "Saturday",0
|
|
|
|
;This example will load Friday.
|
|
ld hl,Days_Of_The_Week ;get base address of table. (Thanks to the align 8, we know that L = 0.)
|
|
ld a,5 ;0 = Sunday, 1 = Monday, ... 5 = Friday, 6 = Saturday
|
|
add a ;Multiply A by 2 (this is faster than SLA A. RLCA would have also worked here)
|
|
ld L,a ;since the table was page-aligned it is sufficient to load A directly into L to properly index the table.
|
|
ld e,(hl) ;get the low byte into E
|
|
inc hl ;increment HL to high byte
|
|
ld d,(hl) ;get the high byte into D
|
|
|
|
;now DE contains the pointer to "Friday"
|
|
ex de,hl ;my PrintString routine takes the pointer in HL as the argument so we need to swap DE with HL.
|
|
call PrintString ;prints a null-terminated string to the screen.
|
|
ret ;return to basic
|