From 45a0b8ca687dcb0c54b338b0b23ec26e50c6d6b3 Mon Sep 17 00:00:00 2001 From: Paul Mathieu Date: Sun, 14 Sep 2025 15:35:10 +0200 Subject: [PATCH] make wozmon.s (in dev container) --- wozmon.s | 266 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 266 insertions(+) create mode 100644 wozmon.s diff --git a/wozmon.s b/wozmon.s new file mode 100644 index 0000000..de9db08 --- /dev/null +++ b/wozmon.s @@ -0,0 +1,266 @@ + .arch i8086,jumps + .code16 + .att_syntax prefix +#NO_APP + .text + .type _ZN12_GLOBAL__N_14putcEh, @function +_ZN12_GLOBAL__N_14putcEh: + movw %sp, %bx + movb 2(%bx), %al +#APP +;# 21 "wozmon.cc" 1 + mov %al, %al +mov $0x0e, %ah +int $0x10 + +;# 0 "" 2 +#NO_APP + ret + .size _ZN12_GLOBAL__N_14putcEh, .-_ZN12_GLOBAL__N_14putcEh + .type _ZN12_GLOBAL__N_17ReadHexEPKc, @function +_ZN12_GLOBAL__N_17ReadHexEPKc: + pushw %si + pushw %di + pushw %bp + movw %sp, %bp + pushw %ds + pushw %ds + movw 8(%bp), %ax + movw %ax, -2(%bp) +.L5: + movw -2(%bp), %bx + cmpb $32, (%bx) + jne .L4 + incw -2(%bp) + jmp .L5 +.L4: + xorw %di, %di + movw %di, %ax + movw %di, %dx + movb $4, %ch +.L9: + movw %di, %bx + movw -2(%bp), %si + movb (%bx,%si), %cl + cmpb $57, %cl + ja .L6 + addb $-48, %cl +.L12: + movb %cl, %bl + cmpb $15, %cl + ja .L3 + movw %ax, %si + movb $12, %cl + shrw %cl, %si + movb %ch, %cl + shlw %cl, %dx + orw %si, %dx + shlw %cl, %ax + movb %bl, -4(%bp) + movb -4(%bp), %bl + xorb %bh, %bh + addw %bx, %ax + movw $0, %bx + adcw %bx, %dx + incw %di + cmpw $8, %di + jne .L9 +.L3: + movw %bp, %sp + popw %bp + popw %di + popw %si + ret +.L6: + addb $-87, %cl + jmp .L12 + .size _ZN12_GLOBAL__N_17ReadHexEPKc, .-_ZN12_GLOBAL__N_17ReadHexEPKc + .type _ZN12_GLOBAL__N_114WriteHexNibbleEh, @function +_ZN12_GLOBAL__N_114WriteHexNibbleEh: + pushw %bp + movw %sp, %bp + movb 4(%bp), %al + movb %al, %dl + xorb %dh, %dh + cmpw $9, %dx + jle .L14 + addb $87, %al +.L16: + movb %al, 4(%bp) + popw %bp + jmp _ZN12_GLOBAL__N_14putcEh +.L14: + addb $48, %al + jmp .L16 + .size _ZN12_GLOBAL__N_114WriteHexNibbleEh, .-_ZN12_GLOBAL__N_114WriteHexNibbleEh + .section .text.startup,"ax",@progbits + .global main + .type main, @function +main: + pushw %si + pushw %di + pushw %es + pushw %bp + movw %sp, %bp + subw $76, %sp + leaw -64(%bp), %di + movw $64, %ax + pushw %ax + xorw %ax, %ax + movw %ax, %es + pushw %ax + pushw %di + call memset + addw $6, %sp + movw %es, %si + movw %es, -70(%bp) +.L18: +#APP +;# 11 "wozmon.cc" 1 + mov $0x00, %ah +int $0x16 + +;# 0 "" 2 +#NO_APP + pushw %ax + movb %al, -71(%bp) + call _ZN12_GLOBAL__N_14putcEh + addw $2, %sp + movb -71(%bp), %al + cmpb $13, %al + jne .L19 + movb $0, (%di) + leaw -64(%bp), %bx + cmpw %bx, %di + jne .L21 + addw $4, %si + adcw $0, -70(%bp) +.L22: + movw %si, %ax + andw $-4, %ax + movw %ax, %es + movw -70(%bp), %di + movw $8, %bx +.L25: + movw %ax, -76(%bp) + movw %bx, -74(%bp) + movb $12, %cl + movb %cl, -71(%bp) + pushw -68(%bp) + call _ZN12_GLOBAL__N_114WriteHexNibbleEh + movw -76(%bp), %ax + movw %ax, %dx + movb -71(%bp), %cl + shrw %cl, %dx + movb $4, %cl + shlw %cl, %di + shlw %cl, %ax + orw %dx, %di + addw $2, %sp + movw -74(%bp), %bx + decw %bx + jne .L25 + movb $58, %al + pushw %ax + call _ZN12_GLOBAL__N_14putcEh + movw %es, %di + leaw 4(%di), %cx + addw $2, %sp +.L26: + movw %cx, -74(%bp) + movb $32, %al + pushw %ax + call _ZN12_GLOBAL__N_14putcEh + movb (%di), %dl + movb %dl, %al + movb %dl, -71(%bp) + xorb %ah, %ah + movb $4, %cl + sarw %cl, %ax + pushw %ax + call _ZN12_GLOBAL__N_114WriteHexNibbleEh + movb -71(%bp), %dl + andb $15, %dl + pushw %dx + call _ZN12_GLOBAL__N_114WriteHexNibbleEh + incw %di + addw $6, %sp + movw -74(%bp), %cx + cmpw %di, %cx + jne .L26 + movb $13, %al + pushw %ax + call _ZN12_GLOBAL__N_14putcEh + movb $10, %al + pushw %ax + call _ZN12_GLOBAL__N_14putcEh + addw $4, %sp + xorw %bx, %bx + leaw -64(%bp), %di +.L29: + movb (%bx,%di), %al + testb %al, %al + je .L18 + cmpb $58, %al + je .L28 + incw %bx + jmp .L29 +.L32: + xchgw %ax, %di + jmp .L18 +.L21: + movb (%bx), %al + testb %al, %al + je .L23 + cmpb $114, %al + je .L24 + incw %bx + jmp .L21 +.L19: + cmpb $127, %al + jne .L30 + decw %di + leaw -64(%bp), %ax + cmpw %ax, %di + jc .L32 + movb $8, %al + pushw %ax + movb %al, -71(%bp) + call _ZN12_GLOBAL__N_14putcEh + movb $32, %dl + pushw %dx + call _ZN12_GLOBAL__N_14putcEh + movb -71(%bp), %al + pushw %ax + call _ZN12_GLOBAL__N_14putcEh + addw $6, %sp + jmp .L18 +.L30: + movb %al, (%di) + incw %di + jmp .L18 +.L24: + call *%si + jmp .L22 +.L23: + leaw -64(%bp), %ax + pushw %ax + call _ZN12_GLOBAL__N_17ReadHexEPKc + addw $2, %sp + xchgw %ax, %si + movw %dx, -70(%bp) + movb $10, %al + pushw %ax + call _ZN12_GLOBAL__N_14putcEh + addw $2, %sp + jmp .L22 +.L28: + leaw 1(%bx,%di), %bx + pushw %bx + call _ZN12_GLOBAL__N_17ReadHexEPKc + addw $2, %sp + movw %ax, (%si) + movw %dx, 2(%si) + jmp .L18 + .size main, .-main + .ident "GCC: (GNU) 6.3.0"