 81a239325d
			
		
	
	81a239325d
	
	
	
		
			
			Adds Link's Awakening: DX. Fully imports and forks LADXR, with permission - https://github.com/daid/LADXR
		
			
				
	
	
		
			90 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			NASM
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			NASM
		
	
	
	
	
	
| ; Handle the serial link cable
 | |
| #IF HARDWARE_LINK
 | |
| ; FF> = Idle
 | |
| ; D6> = Read:  D0><[L] D1><[H] [HL]>
 | |
| ; D9> = Write: D8><[L] D9><[H] DA><[^DATA] DB><[DATA]
 | |
| ; DD> = OrW:   D8><[L] D9><[H] DA><[^DATA] DB><[DATA] (used to set flags without requiring a slow read,modify,write race condition)
 | |
| 
 | |
| handleSerialLink:
 | |
|     ; Check if we got a byte from hardware
 | |
|     ldh  a, [$01]
 | |
| 
 | |
|     cp   $D6
 | |
|     jr   z, serialReadMem
 | |
|     cp   $D9
 | |
|     jr   z, serialWriteMem
 | |
|     cp   $DD
 | |
|     jr   z, serialOrMem
 | |
| 
 | |
| finishSerialLink:
 | |
|     ; Do a new idle transfer.
 | |
|     ld   a, $E4
 | |
|     ldh  [$01], a
 | |
|     ld   a, $81
 | |
|     ldh  [$02], a
 | |
|     ret
 | |
| 
 | |
| serialReadMem:
 | |
|     ld   a, $D0
 | |
|     call serialTransfer
 | |
|     ld   h, a
 | |
|     ld   a, $D1
 | |
|     call serialTransfer
 | |
|     ld   l, a
 | |
|     ld   a, [hl]
 | |
|     call serialTransfer
 | |
|     jr   finishSerialLink
 | |
| 
 | |
| serialWriteMem:
 | |
|     ld   a, $D8
 | |
|     call serialTransfer
 | |
|     ld   h, a
 | |
|     ld   a, $D9
 | |
|     call serialTransfer
 | |
|     ld   l, a
 | |
|     ld   a, $DA
 | |
|     call serialTransfer
 | |
|     cpl
 | |
|     ld   c, a
 | |
|     ld   a, $DB
 | |
|     call serialTransfer
 | |
|     cp   c
 | |
|     jr   nz, finishSerialLink
 | |
|     ld   [hl], a
 | |
|     jr   finishSerialLink
 | |
| 
 | |
| serialOrMem:
 | |
|     ld   a, $D8
 | |
|     call serialTransfer
 | |
|     ld   h, a
 | |
|     ld   a, $D9
 | |
|     call serialTransfer
 | |
|     ld   l, a
 | |
|     ld   a, $DA
 | |
|     call serialTransfer
 | |
|     cpl
 | |
|     ld   c, a
 | |
|     ld   a, $DB
 | |
|     call serialTransfer
 | |
|     cp   c
 | |
|     jr   nz, finishSerialLink
 | |
|     ld   c, a
 | |
|     ld   a, [hl]
 | |
|     or   c
 | |
|     ld   [hl], a
 | |
|     jr   finishSerialLink
 | |
| 
 | |
| ; Transfer A to the serial link and wait for it to be done and return the result in A
 | |
| serialTransfer:
 | |
|     ldh  [$01], a
 | |
|     ld   a, $81
 | |
|     ldh  [$02], a
 | |
| .loop:
 | |
|     ldh  a, [$02]
 | |
|     and  $80
 | |
|     jr   nz, .loop
 | |
|     ldh  a, [$01]
 | |
|     ret
 | |
| 
 | |
| #ENDIF
 |