RosettaCodeData/Task/Enumerations/Z80-Assembly/enumerations-2.z80
2023-07-01 13:44:08 -04:00

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