BBS: Inland Empire Archive Date: 11-30-92 (21:20) Number: 380 From: RICH GELDREICH Refer#: NONE To: ALL Recvd: NO Subj: Mod Player asm/1 Conf: (2) Quik_Bas
;QBMPASM.ASM (Misc. ASM & PC-Speaker routines for QBMP15.BAS) ;Written by Rich Geldreich (C) Copyright November 27, 1992 ;Assembled with TASM v2.0 (This module hasn't been documented yet.) IDEAL MODEL SMALL CODESEG PUBLIC CheckDoneFlag, SetBuffers, GetCS, GetOF, UnsignedComp EVEN ASSUME cs:@CODE, ds:@CODE, es:NOTHING, ss:@DATA ;===================================================================== Buffer1 dw 0 Buffer2 dw 0 DoneFlag db 0 XLATTable: ;PC-Speaker LOG table db 32,31,30,29,28,27,26,25,24,24,23,23,22,22,21,21,21,20,20,20,19,19,19 db 18,18,18,18,17,17,17,17,16,16,16,16,15,15,15,15,14,14,14,14,14,13,13 db 13,13,13,12,12,12,12,12,11,11,11,11,11,11,10,10,10,10,10,10,9,9,9,9 db 9,9,8,8,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,4 db 4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,65,65,65,65,65,65,65 db 64,64,64,64,64,64,64,63,63,63,63,63,63,63,62,62,62,62,62,62,62,61,61 db 61,61,61,61,61,60,60,60,60,60,60,60,59,59,59,59,59,59,59,58,58,58,58 db 58,58,57,57,57,57,57,57,56,56,56,56,56,56,55,55,55,55,55,55,54,54,54 db 54,54,53,53,53,53,53,52,52,52,52,52,51,51,51,51,50,50,50,50,49,49,49 db 49,48,48,48,48,47,47,47,46,46,46,45,45,45,44,44,43,43,42,42,41,40,39 db 38,37,36,35,34,33 ;===================================================================== EVEN PROC NewInt8 Push ds ax bx BDS = $+1 Mov ax, 09999h Mov ds, ax Offset8 = $+1 Mov bx, 09999h Mov al, [ds:bx] Inc bx Inc bx Mov [word cs:Offset8], bx End8 = $+2 Cmp bx, 09999h Je @@10 @@Back: Mov bx, offset XLATTable Xlat [cs:bx] Out 042h, al Mov al, 020h Out 020h, al Pop bx ax ds Iret EVEN @@10: Mov [byte cs:DoneFlag], -1 Mov bx, [cs:Buffer1] Xchg bx, [cs:Buffer2] Mov [cs:Buffer1], bx Mov [word cs:Offset8], bx BufferSize = $+2 Add bx, 09999h Mov [word cs:End8], bx Jmp @@Back ENDP NewInt8 ;===================================================================== EVEN PROC CheckDoneFlag Xor al, al Xchg [cs:DoneFlag], al Cbw Retf 0 ENDP CheckDoneFlag ;===================================================================== PROC SetBuffers ;BDS Buffer1 Buffer2 BufferSize ; 12 10 8 6 Push bp Mov bp, sp Push ds cs Pop ds Mov ax, [ss:bp+8] Mov [ds:Buffer2], ax Mov ax, [ss:bp+12] Mov [word ds:BDS], ax Mov ax, [ss:bp+10] Mov [ds:Buffer1], ax Mov [word ds:Offset8], ax Mov bx, [ss:bp+6] Mov [word ds:BufferSize], bx Add ax, bx Mov [word ds:End8], ax Pop ds bp '<<-Continued On Next Message->> --- MsgToss 2.0b * Origin: Computer Co-Op - Voorhees, NJ | Ted Hare (1:266/29)
Books at Amazon:
Back to BASIC: The History, Corruption, and Future of the Language
Hackers: Heroes of the Computer Revolution (including Tiny BASIC)
Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution
The Advent of the Algorithm: The Idea that Rules the World
Moths in the Machine: The Power and Perils of Programming
Mastering Visual Basic .NET