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))
|
QEMU_ARGS = $(addprefix --option-rom ,$(ROMS))
|
||||||
|
|
||||||
NASM = nasm
|
NASM = nasm
|
||||||
NASM_ARGS = -s -I lib
|
NASM_ARGS = -s -Ilib -Plib/nasmcomp.asm -w-macro-params
|
||||||
|
|
||||||
EMUL = utils/emul
|
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