Use nasm compat file to allow custom asm variant

(I dont want to re-implement all those nasm features later)
This commit is contained in:
Nero 2019-10-14 21:04:40 +00:00
parent 66f54f639c
commit 7dec8b6c81
2 changed files with 125 additions and 1 deletions

View File

@ -9,7 +9,7 @@ QEMU = qemu-system-$(QEMU_ARCH)
QEMU_ARGS = $(addprefix --option-rom ,$(ROMS))
NASM = nasm
NASM_ARGS = -s -I lib
NASM_ARGS = -s -Ilib -Plib/nasmcomp.asm -w-macro-params
EMUL = utils/emul

124
lib/nasmcomp.asm Normal file
View File

@ -0,0 +1,124 @@
; Pseudo-Instruction: fill bytes until offset
%macro pad 1.nolist
times (%1 - ($-$$)) nop
%endmacro
; REGISTERS
%define a al
%define b ch
%define c cl
%define d dh
%define e dl
%define h bh
%define l bl
%define m byte [bx]
; REGISTER PAIRS
%define bc cx
%define de dx
%define hl bx
; INSTRUCTIONS
; data movement
; 'mov' can stay literal
%define mvi mov
%define lxi mov
%macro lda 1
mov al, byte [%1]
%endmacro
%macro sta 1
mov byte [%1], al
%endmacro
%macro lhld 1
mov bx, word [%1]
%endmacro
%macro shld 1
mov word [%1], bx
%endmacro
%macro ldax 1
mov al, byte [%1]
%endmacro
%macro stax 1
mov byte [%1], al
%endmacro
%macro xchg 1
xchg dx, bx
%endmacro
; addition
%macro add 1
add al, %1
%endmacro
%macro adi 1
add al, %1
%endmacro
%macro adc 1
adc al, %1
%endmacro
%macro aci 1
adc al, %1
%endmacro
; subtraction
%macro sub 1
sub al, %1
%endmacro
%macro sui 1
sub al, %1
%endmacro
%macro sbb 1
sub al, %1
%endmacro
%macro sbi 1
sub al, %1
%endmacro
; increment / decrement
%define inr inc
%define dcr dec
%define inx inc
%define dcx dec
; pointer arithmetic
%macro dad 1
add bx, %1
%endmacro
; 'daa' stays literal
;ANA S 10100SSS ZSCPA AND register with A
;ANI # 11100110 db ZSPCA AND immediate with A
;ORA S 10110SSS ZSPCA OR register with A
;ORI # 11110110 ZSPCA OR immediate with A
;XRA S 10101SSS ZSPCA ExclusiveOR register with A
;XRI # 11101110 db ZSPCA ExclusiveOR immediate with A
;CMP S 10111SSS ZSPCA Compare register with A
;CPI # 11111110 ZSPCA Compare immediate with A
;RLC 00000111 C Rotate A left
;RRC 00001111 C Rotate A right
;RAL 00010111 C Rotate A left through carry
;RAR 00011111 C Rotate A right through carry
;CMA 00101111 - Compliment A
;CMC 00111111 C Compliment Carry flag
;STC 00110111 C Set Carry flag
;JMP a 11000011 lb hb - Unconditional jump
;Jccc a 11CCC010 lb hb - Conditional jump
;CALL a 11001101 lb hb - Unconditional subroutine call
;Cccc a 11CCC100 lb hb - Conditional subroutine call
;RET 11001001 - Unconditional return from subroutine
;Rccc 11CCC000 - Conditional return from subroutine
;RST n 11NNN111 - Restart (Call n*8)
;PCHL 11101001 - Jump to address in H:L
;PUSH RP 11RP0101 *2 - Push register pair on the stack
;POP RP 11RP0001 *2 *2 Pop register pair from the stack
;XTHL 11100011 - Swap H:L with top word on stack
;SPHL 11111001 - Set SP to content of H:L
;IN p 11011011 pa - Read input port into A
;OUT p 11010011 pa - Write A to output port
;EI 11111011 - Enable interrupts
;DI 11110011 - Disable interrupts
;HLT 01110110 - Halt processor
;NOP 00000000 - No operation
%macro cnz 1
jz %%skip
call near %1
%%skip:
%endmacro