mirror of
				https://github.com/thornAvery/jep-hack.git
				synced 2025-11-04 21:01:01 +13:00 
			
		
		
		
	
		
			
				
	
	
		
			115 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			NASM
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			NASM
		
	
	
	
	
	
; Value macros
 | 
						|
 | 
						|
; Many arbitrary percentages are simple base-10 or base-16 values:
 | 
						|
; -  10 = 4 percent
 | 
						|
; -  15 = 6 percent
 | 
						|
; - $10 = 6 percent + 1 = 7 percent - 1
 | 
						|
; -  20 = 8 percent
 | 
						|
; -  25 = 10 percent
 | 
						|
; -  30 = 12 percent
 | 
						|
; -  40 = 16 percent
 | 
						|
; -  50 = 20 percent - 1
 | 
						|
; -  60 = 24 percent - 1
 | 
						|
; -  70 = 28 percent - 1
 | 
						|
; -  80 = 31 percent + 1 = 32 percent - 1
 | 
						|
; -  85 = 33 percent + 1 = 34 percent - 1
 | 
						|
; - 100 = 39 percent + 1 = 40 percent - 2
 | 
						|
; - 120 = 47 percent + 1
 | 
						|
; - 123 = 49 percent - 1
 | 
						|
; - 160 = 63 percent
 | 
						|
; - 180 = 71 percent - 1 = 70 percent + 2
 | 
						|
; - 200 = 79 percent - 1
 | 
						|
; - 230 = 90 percent + 1
 | 
						|
DEF percent EQUS "* $ff / 100"
 | 
						|
 | 
						|
; e.g. 1 out_of 2 == 50 percent + 1 == $80
 | 
						|
DEF out_of EQUS "* $100 /"
 | 
						|
 | 
						|
MACRO assert_power_of_2
 | 
						|
	assert (\1) & ((\1) - 1) == 0, "\1 must be a power of 2"
 | 
						|
ENDM
 | 
						|
 | 
						|
; Constant data (db, dw, dl) macros
 | 
						|
 | 
						|
MACRO dwb
 | 
						|
	dw \1
 | 
						|
	db \2
 | 
						|
ENDM
 | 
						|
 | 
						|
MACRO dbw
 | 
						|
	db \1
 | 
						|
	dw \2
 | 
						|
ENDM
 | 
						|
 | 
						|
MACRO dbbbw
 | 
						|
	db \1, \2, \3
 | 
						|
	dw \4
 | 
						|
ENDM
 | 
						|
 | 
						|
MACRO dbwbb
 | 
						|
	db \1
 | 
						|
	dw \2
 | 
						|
	db \3, \4
 | 
						|
ENDM
 | 
						|
 | 
						|
MACRO dbwbw
 | 
						|
	db \1
 | 
						|
	dw \2
 | 
						|
	db \3
 | 
						|
	dw \4
 | 
						|
ENDM
 | 
						|
 | 
						|
MACRO dn ; nybbles
 | 
						|
	rept _NARG / 2
 | 
						|
		db ((\1) << 4) | (\2)
 | 
						|
		shift 2
 | 
						|
	endr
 | 
						|
ENDM
 | 
						|
 | 
						|
MACRO dc ; "crumbs"
 | 
						|
	rept _NARG / 4
 | 
						|
		db ((\1) << 6) | ((\2) << 4) | ((\3) << 2) | (\4)
 | 
						|
		shift 4
 | 
						|
	endr
 | 
						|
ENDM
 | 
						|
 | 
						|
MACRO dt ; three-byte (big-endian)
 | 
						|
	db LOW((\1) >> 16), HIGH(\1), LOW(\1)
 | 
						|
ENDM
 | 
						|
 | 
						|
MACRO dd ; four-byte (big-endian)
 | 
						|
	db HIGH((\1) >> 16), LOW((\1) >> 16), HIGH(\1), LOW(\1)
 | 
						|
ENDM
 | 
						|
 | 
						|
MACRO bigdw ; big-endian word
 | 
						|
	db HIGH(\1), LOW(\1)
 | 
						|
ENDM
 | 
						|
 | 
						|
MACRO dba ; dbw bank, address
 | 
						|
	rept _NARG
 | 
						|
		dbw BANK(\1), \1
 | 
						|
		shift
 | 
						|
	endr
 | 
						|
ENDM
 | 
						|
 | 
						|
MACRO dab ; dwb address, bank
 | 
						|
	rept _NARG
 | 
						|
		dwb \1, BANK(\1)
 | 
						|
		shift
 | 
						|
	endr
 | 
						|
ENDM
 | 
						|
 | 
						|
MACRO bcd
 | 
						|
	rept _NARG
 | 
						|
		dn ((\1) % 100) / 10, (\1) % 10
 | 
						|
		shift
 | 
						|
	endr
 | 
						|
ENDM
 | 
						|
 | 
						|
MACRO sine_table
 | 
						|
; \1 samples of sin(x) from x=0 to x<0.5 turns (pi radians)
 | 
						|
	for x, \1
 | 
						|
		dw sin(x * 0.5 / (\1))
 | 
						|
	endr
 | 
						|
ENDM
 |