cpu 8086 bits 16 ;;; I/O ports KBB: equ 61h ; Keyboard controller port B (also controls speaker) PITC2: equ 42h ; Programmable Interrupt Timer, channel 2 (frequency) PITCTL: equ 43h ; PIT control port. ;;; Control bits SPKR: equ 3 ; Lower two bits of KBB determine speaker on/off CTR: equ 6 ; Counter select offset in PIT control byte CBITS: equ 4 ; Size select offset in PIT control byte B16: equ 3 ; 16-bit mode for the PIT counter MODE: equ 1 ; Offset of mode in PIT control byte SQWV: equ 3 ; Square wave mode ;;; Software interrupts CLOCK: equ 1Ah ; BIOS clock function interrupt DOS: equ 21h ; MS-DOS syscall interrupt ;;; MS-DOS syscalls read: equ 3Fh ; Read from file section .text org 100h ;;; Set up the PIT to generate a 'C' note cli mov al,(2<? db .at-.P, .a-.P, .b-.P, .c-.P ;@ABC db .d-.P, .e-.P, .f-.P, .g-.P ;DEFG db .h-.P, .i-.P, .j-.P, .k-.P ;HIJK db .l-.P, .m-.P, .n-.P, .o-.P ;LMNO db .p-.P, .q-.P, .r-.P, .s-.P ;PQRS db .t-.P, .u-.P, .v-.P, .w-.P ;TUVW db .x-.P, .y-.P, .z-.P, .n_-.P ;XYZ[ db .n_-.P, .n_-.P, .n_-.P, .uscr-.P;\]^_ db .n_-.P, .a-.P, .b-.P, .c-.P ;`abc db .d-.P, .e-.P, .f-.P, .g-.P ;defg db .h-.P, .i-.P, .j-.P, .k-.P ;hijk db .l-.P, .m-.P, .n-.P, .o-.P ;lmno db .p-.P, .q-.P, .r-.P, .s-.P ;pqrs db .t-.P, .u-.P, .v-.P, .w-.P ;tuvw db .x-.P, .y-.P, .z-.P, .n_-.P ;xyz{ db .n_-.P, .n_-.P, .n_-.P, .n_-.P ;|}~ .P: ;;; Morse pulses are stored four to a byte, lowest bits first .n_: db 0 ; To ignore undefined characters .a: db 0Dh .b: db 57h,0 .c: db 77h,0 .d: db 17h .e: db 1h .f: db 75h,0 .g: db 1Fh .h: db 55h,0 .i: db 5h .j: db 0FDh,0 .k: db 37h .l: db 5Dh,0 .m: db 0Fh .n: db 7h .o: db 3Fh .p: db 7Dh,0 .q: db 0DFh,0 .r: db 1Dh .s: db 15h .t: db 3h .u: db 35h .v: db 0D5h,0 .w: db 3Dh .x: db 0D7h,0 .y: db 0F7h,0 .z: db 5Fh,0 .n0: db 0FFh,3 .n1: db 0FDh,3 .n2: db 0F5h,3 .n3: db 0D5h,3 .n4: db 55h,3 .n5: db 55h,1 .n6: db 57h,1 .n7: db 5Fh,1 .n8: db 7Fh,1 .n9: db 0FFh,1 .dot: db 0DDh,0Dh .comma: db 5Fh,0Fh .qm: db 0F5h,5 .quot: db 0FDh,7 .excl: db 77h,0Fh .slsh: db 0D7h,1 .open: db 0F7h,1 .close: db 0F7h,0Dh .amp: db 5Dh,1 .colon: db 7Fh,5 .semi: db 77h,7 .eq: db 57h,3 .plus: db 0DDh,1 .minus: db 57h,0Dh .uscr: db 0F5h,0Dh .dquot: db 5Dh,7 .dolar: db 0D5h,35h .at: db 7Dh,7 section .bss buf: resb 1024 ; 1K buffer .size: equ $-buf