aboutsummaryrefslogtreecommitdiff
path: root/examples/serial.gbasm
blob: d4b49371f332b93e0c4be5900718cced46e47cb0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
; This ROM is a simple example of how to use serial connections.
; It will wait to receive text via the serial connection, save the text in memory until it encounters a new line (without overflow check), then send back in ASCII "Astatin" and a new line followed by the text that was received.

.PADTO 0x0058
	JP =Serial_Recv

.PADTO 0x0100
Entry:
	JP =Start

.PADTO 0x0104
Nintendo_Logo: ; The Nintendo logo must be stored in bytes 0x104-133
	.DB $CE,$ED,$66,$66,$CC,$0D,$00,$0B,$03,$73,$00,$83,$00,$0C,$00,$0D
	.DB $00,$08,$11,$1F,$88,$89,$00,$0E,$DC,$CC,$6E,$E6,$DD,$DD,$D9,$99
	.DB $BB,$BB,$67,$63,$6E,$0E,$EC,$CC,$DD,$DC,$99,$9F,$BB,$B9,$33,$3E

.PADTO 0x0134
Checksum: ; The bytes 0x134-0x14d need to add up to 0xe7 (= 0xff - 0x19)
	.DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
	.DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$e7

Start:
	LD SP, $fffe

	LD A, $00
	LD ($40), A

	LD A, $08
	LD ($ff), A

	LD HL, $c000
	EI

	Lock:
		HALT
		EI
		JR =Lock

Serial_Recv:
	LD A, ($01)
	CP $0a
	CALL Z, =Read_back
	LD (HL+), A
	RETI

Read_back:
	LD (HL), $00
	LD HL, =Astatin_ASCII
	CALL =Print
	LD HL, $c000
	CALL =Print
	JP =Start

Astatin_ASCII:
.DB $41, $73, $74, $61, $74, $69, $6e, $0a $00

Print:
	.send_loop:
		LD A, (HL+)
		CP $00
		RET Z

		LD ($01), A

		LD A, $81

		LD ($02), A

		.wait_transfer:
			LD A, ($02)
			BIT 7, A
			JR NZ, =.wait_transfer
		JR =.send_loop