Category : Assembly Language Source Code
Archive   : NORTASM.ZIP
Filename : DISPATCH.ASM

 
Output of file : DISPATCH.ASM contained in archive : NORTASM.ZIP
.MODEL SMALL

.CODE
EXTRN NEXT_SECTOR:PROC ;In DISK_IO.ASM
EXTRN PREVIOUS_SECTOR:PROC ;In DISK_IO.ASM
EXTRN PHANTOM_UP:PROC, PHANTOM_DOWN:PROC ;In PHANTOM.ASM
EXTRN PHANTOM_LEFT:PROC, PHANTOM_RIGHT:PROC
EXTRN PAGE_UP:PROC, PAGE_DOWN:PROC
EXTRN HOME_KEY:PROC, END_KEY:PROC
EXTRN WRITE_SECTOR:PROC ;In DISK_IO.ASM
EXTRN CHANGE_DISK_DRIVE:PROC
EXTRN READ_SECTOR_NUMBER:PROC
EXTRN OPEN_NEW_FILE:PROC
EXTRN READ_OFFSET_NUMBER:PROC
.DATA
;-----------------------------------------------------------------------;
; This table contains the legal extended ASCII keys and the addresses ;
; of the procedures that should be called when each key is pressed. ;
; ;
; The format of the table is ;
; DB 72 ;Extended code for cursor up ;
; DW OFFSET PHANTOM_UP ;
;-----------------------------------------------------------------------;
DISPATCH_TABLE LABEL BYTE
DB 85 ;Shift F2
DW OFFSET _TEXT:WRITE_SECTOR
DB 61 ;F3
DW OFFSET _TEXT:PREVIOUS_SECTOR
DB 62 ;F4
DW OFFSET _TEXT:NEXT_SECTOR
DB 63 ;F5
DW OFFSET _TEXT:CHANGE_DISK_DRIVE
DB 64 ;F6
DW OFFSET _TEXT:READ_SECTOR_NUMBER
DB 65 ;F7
DW OFFSET _TEXT:OPEN_NEW_FILE
DB 66 ;F8
DW OFFSET _TEXT:READ_OFFSET_NUMBER
DB 72 ;Cursor up
DW OFFSET _TEXT:PHANTOM_UP
DB 80 ;Cursor down
DW OFFSET _TEXT:PHANTOM_DOWN
DB 75 ;Cursor left
DW OFFSET _TEXT:PHANTOM_LEFT
DB 77 ;Cursor right
DW OFFSET _TEXT:PHANTOM_RIGHT
DB 73 ;Page Up
DW OFFSET _TEXT:PAGE_UP
DB 81 ;Page Down
DW OFFSET _TEXT:PAGE_DOWN
DB 71 ;Home
DW OFFSET _TEXT:HOME_KEY
DB 79 ;End
DW OFFSET _TEXT:END_KEY
DB 0 ;End of the table

.CODE

PUBLIC DISPATCHER
EXTRN READ_BYTE:PROC, EDIT_BYTE:PROC
EXTRN WRITE_PROMPT_LINE:PROC
.DATA
EXTRN EDITOR_PROMPT:BYTE
.CODE
;-----------------------------------------------------------------------;
; This is the central dispatcher. During normal editing and viewing, ;
; this procedure reads characters from the keyboard and, if the char ;
; is a command key (such as a cursor key), DISPATCHER calls the ;
; procedures that do the actual work. This dispatching is done for ;
; special keys listed in the table DISPATCH_TABLE, where the procedure ;
; addresses are stored just after the key names. ;
; ;
; If the character is not a special key, then it should be placed ;
; directly into the sector buffer--this is the editing mode. ;
; ;
; Uses: READ_BYTE, EDIT_BYTE, WRITE_PROMPT_LINE ;
; Reads: EDITOR_PROMPT ;
;-----------------------------------------------------------------------;
DISPATCHER PROC
PUSH AX
PUSH BX
PUSH DX
DISPATCH_LOOP:
CALL READ_BYTE ;Read character into AX
OR AH,AH ;AX = -1 if no character read, 1
; for an extended code.
JS NO_CHARS_READ ;No character read, try again
JNZ SPECIAL_KEY ;Read extended code
MOV DL,AL
CALL EDIT_BYTE ;Was normal character, edit byte
JMP DISPATCH_LOOP ;Read another character

SPECIAL_KEY:
CMP AL,68 ;F10--exit?
JE END_DISPATCH ;Yes, leave
;Use BX to look through table
LEA BX,DISPATCH_TABLE
SPECIAL_LOOP:
CMP BYTE PTR [BX],0 ;End of table?
JE NOT_IN_TABLE ;Yes, key was not in the table
CMP AL,[BX] ;Is it this table entry?
JE DISPATCH ;Yes, then dispatch
ADD BX,3 ;No, try next entry
JMP SPECIAL_LOOP ;Check next table entry

DISPATCH:
INC BX ;Point to address of procedure
CALL WORD PTR [BX] ;Call procedure
JMP DISPATCH_LOOP ;Wait for another key

NOT_IN_TABLE: ;Do nothing, just read next character
JMP DISPATCH_LOOP

NO_CHARS_READ:
LEA DX,EDITOR_PROMPT
CALL WRITE_PROMPT_LINE ;Erase any invalid characters typed
JMP DISPATCH_LOOP ;Try again

END_DISPATCH:
POP DX
POP BX
POP AX
RET
DISPATCHER ENDP


END


  3 Responses to “Category : Assembly Language Source Code
Archive   : NORTASM.ZIP
Filename : DISPATCH.ASM

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/