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:
parent
66f54f639c
commit
7dec8b6c81
2
Makefile
2
Makefile
@ -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
124
lib/nasmcomp.asm
Normal 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
|
Loading…
Reference in New Issue
Block a user