This writeup is a spot for my notes regarding oddities of using z80asm in my upcoming projects.
Write the program
		ORG	$2000
		LD	SP,$FFFF
MAIN:	CALL TIMER5
TIMER5:	LD E,$35
J60:	LD B,$FF
J61:	LD D,$FF
J62:	DEC D
		JP NZ,J62
		DEC B
		JP NZ,J61
		DEC E
		JP NZ,J60
		RET
END
Assemble the program
z80asm -ltest.lst -i test.asm -o test.bin
View ASM/HEX side by side (listing)
# File test.asm
0000					ORG	$2000  
2000 31 ff ff				LD	SP,$FFFF  
2003 cd 06 20		MAIN:	CALL TIMER5  
2006 1e 35		TIMER5:	LD E,$35  
2008 06 ff		J60:	LD B,$FF  
200a 16 ff		J61:	LD D,$FF  
200c 15			J62:	DEC D  
200d c2 0c 20				JP NZ,J62  
2010 05					DEC B  
2011 c2 0a 20				JP NZ,J61  
2014 1d					DEC E  
2015 c2 08 20				JP NZ,J60  
2018 c9					RET  
2019			END
# End of file test.asm
2019
- or provide z80asm -l infile outfileand the listing will dump to stdout
View binary file
0000000: 31ff ffcd 0620 1e35 06ff 16ff 15c2 0c20  1.... .5.......
0000010: 05c2 0a20 1dc2 0820 c9                   ... ... .
- Note how the listing has the $2000 offset applied but the binary does not!
Create HEX for programming
- the binary file has no start offset so we need to insert nulls in front of the code sequence
- $((0xFFFF))lets BASH do the hex2dec conversion
25+0 records in
25+0 records out
25 bytes (25 B) copied, 0.000673997 s, 37.1 kB/s
- -a to skip the null entries
0000000: 0000 0000 0000 0000 0000 0000 0000 0000  ................
*
0002000: 31ff ffcd 0620 1e35 06ff 16ff 15c2 0c20  1.... .5.......
0002010: 05c2 0a20 1dc2 0820 c9                   ... ... .
Program your target
- My Arduino sketch requires a serial dump starting at address $0000so thats why we had to insert all those nulls. 90% of the time your programs will start at$0000anyways.
