; ****************************************************************************
; 3dc.s (TRDOS 386, TRDOS v2.0 - sample binary file, '3dc.prg')
; ----------------------------------------------------------------------------
; 3DC.PRG ! TEST program !  TRDOS 386 VGA Functionality test !
;
; 05/09/2016
;
; [ Last Modification: 05/09/2016 ]
;
; Derived from disassembly of '3D.COM' (MSDOS) intro file
; (10/09/1995, 2113 bytes)
;
; Assembler: NASM 2.11

; Original code disassembler: IDA Pro Free (MASM syntax)
; 
; (Original -msdos- code has been modifed for TRDOS 386 system calls and
; other protected mode (TRDOS 386) interrupts.)
; ****************************************************************************

; 19/05/2016
; 29/04/2016
; TRDOS 386 system calls (temporary list!)
_ver 	equ 0
_exit 	equ 1
_fork 	equ 2
_read 	equ 3
_write	equ 4
_open	equ 5
_close 	equ 6
_wait 	equ 7
_creat 	equ 8
_link 	equ 9
_unlink	equ 10
_exec	equ 11
_chdir	equ 12
_time 	equ 13
_mkdir 	equ 14
_chmod	equ 15
_chown	equ 16
_break	equ 17
_stat	equ 18
_seek	equ 19
_tell 	equ 20
_mount	equ 21
_umount	equ 22
_setuid	equ 23
_getuid	equ 24
_stime	equ 25
_quit	equ 26	
_intr	equ 27
_fstat	equ 28
_emt 	equ 29
_mdate 	equ 30
_video	equ 31
_audio	equ 32
_timer	equ 33
_sleep	equ 34
_msg    equ 35
_geterr equ 36
_rsrvd1	equ 37
_pri	equ 38
_rele 	equ 39

%macro sys 1-4
    ; 29/04/2016 - TRDOS 386 (TRDOS v2.0)	
    ; 03/09/2015	
    ; 13/04/2015
    ; Retro UNIX 386 v1 system call.	
    %if %0 >= 2   
        mov ebx, %2
        %if %0 >= 3    
            mov ecx, %3
            %if %0 = 4
               mov edx, %4   
            %endif
        %endif
    %endif
    mov eax, %1
    ;int 30h
    int 40h ; TRDOS 386 (TRDOS v2.0)	   
%endmacro

; TRDOS 386 (and Retro UNIX 386 v1) system call format:
; sys systemcall (eax) <arg1 (ebx)>, <arg2 (ecx)>, <arg3 (edx)>


; 3D.ASM
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; +	This file is generated by The Interactive Disassembler (IDA)	    +
; +	Copyright (c) 2010 by Hex-Rays SA, <support@hex-rays.com>	    +
; +			 Licensed to: Freeware version			    +
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
; Input	MD5   :	99FB4748896801681275A14F458D4563

; File Name   :	C:\dosprogs\PROGRAMS\3D.COM
; Format      :	MS-DOS COM-file
; Base Address:	0h Range: 100h-941h Loaded length: 841h

; NASM version: Erdogan Tan, 14/08/2016

; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

[BITS 32]	; 80386 Protected Mode (32 bit) intructions

[ORG 0]		; (Start at Virtual Address 0)

start:
		; DIRECT VGA MEMORY ACCESS
		;xor	ebx, ebx
		mov	bh, 5 ; Direct access/map to VGA memory (0A0000h)
		;mov	eax, _video ; 1Fh
		mov	al, 1Fh ; sys _video ; TRDOS 386 Video functions
		int	40h   ; TRDOS 386 system call

		; eax = 0A0000h
		and	eax, eax
		jz      terminate ; error (eax = 0)

		;mov     esi, prg_msg
		;call	print_msg

		mov	ax, 13h
		;int	10h		; - VIDEO - SET	VIDEO MODE
					; AL = mode
		int	31h	; TRDOS 386 Video interrupt 

		mov	edi, 0A0000h
		mov	si, _6D9h
		mov	dx, 3C8h
		xor	al, al
		;out	dx, al
		
		mov	ah, 1 ; out (byte)
		int	34h ; TRDOS 386 - IOCTL interrupt

		;mov	dx, 3C9h
		inc	dx  ; 3C9h

		mov	cx, 237h
		;rep outsb
outsb_1:
		lodsb
		;mov	ah, 1 ; out (byte)
		; al = data byte
		; dx = port number
		int	34h ; TRDOS 386 - IOCTL interrupt
		
		dec	cx
		jnz	short outsb_1

		mov	word [word_925], 1
		mov	word [word_927], 1
		mov	word [word_929], 1
		mov	word [word_92B], 100h
		mov	word [word_92D], 100h
		mov	word [word_92F], 12Ch

loc_143:				; CODE XREF: start+4Aj
		call	sub_310

		;in	al, 60h		; AT Keyboard controller 8042.
		;cmp	al, 1
		;jnz	short loc_143

		mov	ah, 1	; Check keyboard buffer
		int	32h	; TRDOS 386 Keyboard interrupt 
		jz	short loc_143

		mov	ax, 3
		
		;int	10h		; - VIDEO - SET	VIDEO MODE
					; AL = mode
		int	31h	; TRDOS 386 Video interrupt 

		;mov	si, prg_msg
		mov	si, _33Fh
		call	print_msg
terminate:
		sys 	_exit   ; INT 40h
here:
		jmp	short here

; --------------- S U B	R O U T	I N E ---------------------------------------

sub_15D:				; CODE XREF: sub_310+17p
		mov	dx, 3DAh

		mov	ah, 0
loc_160:				; CODE XREF: sub_15D+6j
		;in	al, dx		; Video	status bits:
					; 0: retrace.  1=display is in vert or horiz retrace.
					; 1: 1=light pen is triggered; 0=armed
					; 2: 1=light pen switch	is open; 0=closed
					; 3: 1=vertical	sync pulse is occurring.

		;mov	ah, 0 ; in (byte)
		int	34h ; TRDOS 386 - IOCTL interrupt

		test	al, 8
		jnz	short loc_160

loc_165:				; CODE XREF: sub_15D+Bj
		;in	al, dx		; Video	status bits:
					; 0: retrace.  1=display is in vert or horiz retrace.
					; 1: 1=light pen is triggered; 0=armed
					; 2: 1=light pen switch	is open; 0=closed
					; 3: 1=vertical	sync pulse is occurring.

		;mov	ah, 0 ; in (byte)
		int	34h ; TRDOS 386 - IOCTL interrupt

		test	al, 8
		jz	short loc_165
		retn

; --------------- S U B	R O U T	I N E ---------------------------------------

sub_16B:				; CODE XREF: sub_310p
		mov	ax, [word_91F]
		mov	bx, [word_921]
		mov	cx, [word_923]
		add	ax, [word_925]
		and	ax, 0FFh
		mov	[word_91F], ax
		add	bx, [word_927]
		and	bx, 0FFh
		mov	[word_921], bx
		add	cx, [word_929]
		and	cx, 0FFh
		mov	[word_923], cx
		retn

; --------------- S U B	R O U T	I N E ---------------------------------------

sub_199:				; CODE XREF: sub_1B3+4p sub_1B3+12p ...
		push	bx
		shl	bx, 1
		mov	ax, [ebx+_362h]
		pop	bx
		push	ax
		add	bx, 40h
		and	bx, 0FFh
		shl	bx, 1
		mov	ax, [ebx+_362h]
		mov	bx, ax
		pop	ax
		retn

; --------------- S U B	R O U T	I N E ---------------------------------------


sub_1B3:				; CODE XREF: sub_310+3p
		mov	bx, [word_91F]
		call	sub_199
		mov	[word_931], ax
		mov	[word_933], bx
		mov	bx, [word_921]
		call	sub_199
		mov	[word_935], ax
		mov	[word_937], bx
		mov	bx, [word_923]
		call	sub_199
		mov	[word_939], ax
		mov	[word_93B], bx
		retn

; --------------- S U B	R O U T	I N E ---------------------------------------

sub_1DE:				; CODE XREF: sub_310:loc_31Cp
		movsx	ax, byte [esi+_562h]
		mov	[word_913], ax
		movsx	ax, byte [esi+_563h]
		mov	[word_915], ax
		movsx	ax, byte [esi+_564h]
		mov	[word_917], ax
		mov	ax, [word_915]
		mov	bx, [word_933]
		imul	bx
		mov	bp, ax
		mov	ax, [word_917]
		mov	bx, [word_931]
		imul	bx
		sub	bp, ax
		sar	bp, 8
		mov	[word_91B], bp
		mov	ax, [word_915]
		mov	bx, [word_931]
		imul	bx
		mov	bp, ax
		mov	ax, [word_917]
		mov	bx, [word_933]
		imul	bx
		add	bp, ax
		sar	bp, 8
		mov	[word_91D], bp
		mov	ax, [word_91B]
		mov	[word_915], ax
		mov	ax, [word_91D]
		mov	[word_917], ax
		mov	ax, [word_913]
		mov	bx, [word_937]
		imul	bx
		mov	bp, ax
		mov	ax, [word_917]
		mov	bx, [word_935]
		imul	bx
		sub	bp, ax
		sar	bp, 8
		mov	[word_919], bp
		mov	ax, [word_913]
		mov	bx, [word_935]
		imul	bx
		mov	bp, ax
		mov	ax, [word_917]
		mov	bx, [word_937]
		imul	bx
		add	bp, ax
		sar	bp, 8
		mov	[word_91D], bp
		mov	ax, [word_919]
		mov	[word_913], ax
		mov	ax, [word_91D]
		mov	[word_917], ax
		mov	ax, [word_913]
		mov	bx, [word_93B]
		imul	bx
		mov	bp, ax
		mov	ax, [word_915]
		mov	bx, [word_939]
		imul	bx
		sub	bp, ax
		sar	bp, 8
		mov	[word_919], bp
		mov	ax, [word_913]
		mov	bx, [word_939]
		imul	bx
		mov	bp, ax
		mov	ax, [word_915]
		mov	bx, [word_93B]
		imul	bx
		add	bp, ax
		sar	bp, 8
		mov	[word_91B], bp
		mov	ax, [word_919]
		mov	[word_913], ax
		mov	ax, [word_91B]
		mov	[word_915], ax
		retn

; --------------- S U B	R O U T	I N E ---------------------------------------

sub_2C9:				; CODE XREF: sub_310+Fp
		mov	ax, [word_92B]
		mov	bx, [word_913]
		imul	bx
		mov	bx, [word_917]
		add	bx, [word_92F]
		idiv	bx
		add	ax, [word_93D]
		mov	bp, ax
		mov	ax, [word_92D]
		mov	bx, [word_915]
		imul	bx
		mov	bx, [word_917]
		add	bx, [word_92F]
		idiv	bx
		add	ax, [word_93F]
		mov	bx, 140h
		imul	bx
		add	ax, bp
		mov	di, ax
		mov	ax, [word_917]
		add	ax, 64h
		mov	[edi], al
		mov	[esi+_941h], di
		retn

; --------------- S U B	R O U T	I N E ---------------------------------------

sub_310:				; CODE XREF: start:loc_143p
		call	sub_16B
		call	sub_1B3
		xor	si, si
		mov	cx, 7Dh
		nop

loc_31C:				; CODE XREF: sub_310+15j
		call	sub_1DE
		call	sub_2C9
		add	si, 3
		loop	loc_31C
		call	sub_15D
		xor	si, si
		xor	al, al
		mov	cx, 7Dh
		nop

loc_332:				; CODE XREF: sub_310+2Cj
		mov	di, [esi+_941h]
		mov	[edi], al
		add	si, 3
		loop	loc_332
		retn

print_msg:
		mov	bx, 7
        	mov     ah, 0Eh
pmsg_loop:
		lodsb
		and	al, al
		jz	short pmsg_ok
		int	31h	; TRDOS 386 video interrupt
		jmp	short pmsg_loop	
pmsg_ok:
		;mov	ah, 10h ; Getchar
		;int	32h	; TRDOS 386 keyboard interrupt
		retn

prg_msg:
		db	'ERDOGAN TAN - TRDOS 386 VGA Test - 3DC.PRG'
		db	0Dh, 0Ah
		db	'05/09/2016'
		db	0Dh, 0Ah
		db	0 

; --------------- DATA -----------------------------------------------------
_33Fh:
		db  0Dh
		db  0Ah
		db  43h	; C
		db  6Fh	; o
		db  64h	; d
		db  65h	; e
		db  20h
		db  62h	; b
		db  79h	; y
		db  20h
		db  56h	; V
		db  75h	; u
		db  6Ch	; l
		db  74h	; t
		db  75h	; u
		db  72h	; r
		db  65h	; e
		db  20h
		db  2Fh	; /
		db  20h
		db  4Fh	; O
		db  75h	; u
		db  74h	; t
		db  6Ch	; l
		db  61h	; a
		db  77h	; w
		db  20h
		db  54h	; T
		db  72h	; r
		db  69h	; i
		db  61h	; a
		db  64h	; d
		db  0Dh
		db  0Ah
		;db  24h ; $
		db    0
_362h:
		db    0
		db    0
		db    6
		db    0
		db  0Dh
		db    0
		db  13h
		db    0
		db  19h
		db    0
		db  1Fh
		db    0
		db  26h	; &
		db    0
		db  2Ch	; ,
		db    0
		db  32h	; 2
		db    0
		db  38h	; 8
		db    0
		db  3Eh	; >
		db    0
		db  44h	; D
		db    0
		db  4Ah	; J
		db    0
		db  50h	; P
		db    0
		db  56h	; V
		db    0
		db  5Ch
		db    0
		db  62h	; b
		db    0
		db  68h	; h
		db    0
		db  6Dh	; m
		db    0
		db  73h	; s
		db    0
		db  79h	; y
		db    0
		db  7Eh	; ~
		db    0
		db  84h	; 
		db    0
		db  89h	; 
		db    0
		db  8Eh	; 
		db    0
		db  93h	; 
		db    0
		db  98h	; 
		db    0
		db  9Dh	; 
		db    0
		db 0A2h	; 
		db    0
		db 0A7h	; 
		db    0
		db 0ACh	; 
		db    0
		db 0B1h	; 
		db    0
		db 0B5h	; 
		db    0
		db 0B9h	; 
		db    0
		db 0BEh	; 
		db    0
		db 0C2h	; 
		db    0
		db 0C6h	; 
		db    0
		db 0CAh	; 
		db    0
		db 0CEh	; 
		db    0
		db 0D1h	; 
		db    0
		db 0D5h	; 
		db    0
		db 0D8h	; 
		db    0
		db 0DCh	; 
		db    0
		db 0DFh	; 
		db    0
		db 0E2h	; 
		db    0
		db 0E5h	; 
		db    0
		db 0E7h	; 
		db    0
		db 0EAh	; 
		db    0
		db 0EDh	; 
		db    0
		db 0EFh	; 
		db    0
		db 0F1h	; 
		db    0
		db 0F3h	; 
		db    0
		db 0F5h	; 
		db    0
		db 0F7h	; 
		db    0
		db 0F8h	; 
		db    0
		db 0FAh	; 
		db    0
		db 0FBh	; 
		db    0
		db 0FCh	; 
		db    0
		db 0FDh	; 
		db    0
		db 0FEh	; 
		db    0
		db 0FFh
		db    0
		db 0FFh
		db    0
		db    0
		db    1
		db    0
		db    1
		db    0
		db    1
		db    0
		db    1
		db    0
		db    1
		db 0FFh
		db    0
		db 0FFh
		db    0
		db 0FEh	; 
		db    0
		db 0FDh	; 
		db    0
		db 0FCh	; 
		db    0
		db 0FBh	; 
		db    0
		db 0FAh	; 
		db    0
		db 0F8h	; 
		db    0
		db 0F7h	; 
		db    0
		db 0F5h	; 
		db    0
		db 0F3h	; 
		db    0
		db 0F1h	; 
		db    0
		db 0EFh	; 
		db    0
		db 0EDh	; 
		db    0
		db 0EAh	; 
		db    0
		db 0E7h	; 
		db    0
		db 0E5h	; 
		db    0
		db 0E2h	; 
		db    0
		db 0DFh	; 
		db    0
		db 0DCh	; 
		db    0
		db 0D8h	; 
		db    0
		db 0D5h	; 
		db    0
		db 0D1h	; 
		db    0
		db 0CEh	; 
		db    0
		db 0CAh	; 
		db    0
		db 0C6h	; 
		db    0
		db 0C2h	; 
		db    0
		db 0BEh	; 
		db    0
		db 0B9h	; 
		db    0
		db 0B5h	; 
		db    0
		db 0B1h	; 
		db    0
		db 0ACh	; 
		db    0
		db 0A7h	; 
		db    0
		db 0A2h	; 
		db    0
		db  9Dh	; 
		db    0
		db  98h	; 
		db    0
		db  93h	; 
		db    0
		db  8Eh	; 
		db    0
		db  89h	; 
		db    0
		db  84h	; 
		db    0
		db  7Eh	; ~
		db    0
		db  79h	; y
		db    0
		db  73h	; s
		db    0
		db  6Dh	; m
		db    0
		db  68h	; h
		db    0
		db  62h	; b
		db    0
		db  5Ch
		db    0
		db  56h	; V
		db    0
		db  50h	; P
		db    0
		db  4Ah	; J
		db    0
		db  44h	; D
		db    0
		db  3Eh	; >
		db    0
		db  38h	; 8
		db    0
		db  32h	; 2
		db    0
		db  2Ch	; ,
		db    0
		db  26h	; &
		db    0
		db  1Fh
		db    0
		db  19h
		db    0
		db  13h
		db    0
		db  0Dh
		db    0
		db    6
		db    0
		db    0
		db    0
		db 0FAh	; 
		db 0FFh
		db 0F3h	; 
		db 0FFh
		db 0EDh	; 
		db 0FFh
		db 0E7h	; 
		db 0FFh
		db 0E1h	; 
		db 0FFh
		db 0DAh	; 
		db 0FFh
		db 0D4h	; 
		db 0FFh
		db 0CEh	; 
		db 0FFh
		db 0C8h	; 
		db 0FFh
		db 0C2h	; 
		db 0FFh
		db 0BCh	; 
		db 0FFh
		db 0B6h	; 
		db 0FFh
		db 0B0h	; 
		db 0FFh
		db 0AAh	; 
		db 0FFh
		db 0A4h	; 
		db 0FFh
		db  9Eh	; 
		db 0FFh
		db  98h	; 
		db 0FFh
		db  93h	; 
		db 0FFh
		db  8Dh	; 
		db 0FFh
		db  87h	; 
		db 0FFh
		db  82h	; 
		db 0FFh
		db  7Ch	; |
		db 0FFh
		db  77h	; w
		db 0FFh
		db  72h	; r
		db 0FFh
		db  6Dh	; m
		db 0FFh
		db  68h	; h
		db 0FFh
		db  63h	; c
		db 0FFh
		db  5Eh	; ^
		db 0FFh
		db  59h	; Y
		db 0FFh
		db  54h	; T
		db 0FFh
		db  4Fh	; O
		db 0FFh
		db  4Bh	; K
		db 0FFh
		db  47h	; G
		db 0FFh
		db  42h	; B
		db 0FFh
		db  3Eh	; >
		db 0FFh
		db  3Ah	; :
		db 0FFh
		db  36h	; 6
		db 0FFh
		db  32h	; 2
		db 0FFh
		db  2Fh	; /
		db 0FFh
		db  2Bh	; +
		db 0FFh
		db  28h	; (
		db 0FFh
		db  24h	; $
		db 0FFh
		db  21h	; !
		db 0FFh
		db  1Eh
		db 0FFh
		db  1Bh
		db 0FFh
		db  19h
		db 0FFh
		db  16h
		db 0FFh
		db  13h
		db 0FFh
		db  11h
		db 0FFh
		db  0Fh
		db 0FFh
		db  0Dh
		db 0FFh
		db  0Bh
		db 0FFh
		db    9
		db 0FFh
		db    8
		db 0FFh
		db    6
		db 0FFh
		db    5
		db 0FFh
		db    4
		db 0FFh
		db    3
		db 0FFh
		db    2
		db 0FFh
		db    1
		db 0FFh
		db    1
		db 0FFh
		db    0
		db 0FFh
		db    0
		db 0FFh
		db    0
		db 0FFh
		db    0
		db 0FFh
		db    0
		db 0FFh
		db    1
		db 0FFh
		db    1
		db 0FFh
		db    2
		db 0FFh
		db    3
		db 0FFh
		db    4
		db 0FFh
		db    5
		db 0FFh
		db    6
		db 0FFh
		db    8
		db 0FFh
		db    9
		db 0FFh
		db  0Bh
		db 0FFh
		db  0Dh
		db 0FFh
		db  0Fh
		db 0FFh
		db  11h
		db 0FFh
		db  13h
		db 0FFh
		db  16h
		db 0FFh
		db  19h
		db 0FFh
		db  1Bh
		db 0FFh
		db  1Eh
		db 0FFh
		db  21h	; !
		db 0FFh
		db  24h	; $
		db 0FFh
		db  28h	; (
		db 0FFh
		db  2Bh	; +
		db 0FFh
		db  2Fh	; /
		db 0FFh
		db  32h	; 2
		db 0FFh
		db  36h	; 6
		db 0FFh
		db  3Ah	; :
		db 0FFh
		db  3Eh	; >
		db 0FFh
		db  42h	; B
		db 0FFh
		db  47h	; G
		db 0FFh
		db  4Bh	; K
		db 0FFh
		db  4Fh	; O
		db 0FFh
		db  54h	; T
		db 0FFh
		db  59h	; Y
		db 0FFh
		db  5Eh	; ^
		db 0FFh
		db  63h	; c
		db 0FFh
		db  68h	; h
		db 0FFh
		db  6Dh	; m
		db 0FFh
		db  72h	; r
		db 0FFh
		db  77h	; w
		db 0FFh
		db  7Ch	; |
		db 0FFh
		db  82h	; 
		db 0FFh
		db  87h	; 
		db 0FFh
		db  8Dh	; 
		db 0FFh
		db  93h	; 
		db 0FFh
		db  98h	; 
		db 0FFh
		db  9Eh	; 
		db 0FFh
		db 0A4h	; 
		db 0FFh
		db 0AAh	; 
		db 0FFh
		db 0B0h	; 
		db 0FFh
		db 0B6h	; 
		db 0FFh
		db 0BCh	; 
		db 0FFh
		db 0C2h	; 
		db 0FFh
		db 0C8h	; 
		db 0FFh
		db 0CEh	; 
		db 0FFh
		db 0D4h	; 
		db 0FFh
		db 0DAh	; 
		db 0FFh
		db 0E1h	; 
		db 0FFh
		db 0E7h	; 
		db 0FFh
		db 0EDh	; 
		db 0FFh
		db 0F3h	; 
		db 0FFh
		db 0FAh	; 
		db 0FFh
_562h:
		db 0DDh	; 
_563h:
		db 0DDh	; 
_564h:
		db 0DDh	; 
		db 0F1h	; 
		db 0DDh	; 
		db 0DDh	; 
		db    5
		db 0DDh	; 
		db 0DDh	; 
		db  19h
		db 0DDh	; 
		db 0DDh	; 
		db  2Dh	; -
		db 0DDh	; 
		db 0DDh	; 
		db 0DDh	; 
		db 0F1h	; 
		db 0DDh	; 
		db 0F1h	; 
		db 0F1h	; 
		db 0DDh	; 
		db    5
		db 0F1h	; 
		db 0DDh	; 
		db  19h
		db 0F1h	; 
		db 0DDh	; 
		db  2Dh	; -
		db 0F1h	; 
		db 0DDh	; 
		db 0DDh	; 
		db    5
		db 0DDh	; 
		db 0F1h	; 
		db    5
		db 0DDh	; 
		db    5
		db    5
		db 0DDh	; 
		db  19h
		db    5
		db 0DDh	; 
		db  2Dh	; -
		db    5
		db 0DDh	; 
		db 0DDh	; 
		db  19h
		db 0DDh	; 
		db 0F1h	; 
		db  19h
		db 0DDh	; 
		db    5
		db  19h
		db 0DDh	; 
		db  19h
		db  19h
		db 0DDh	; 
		db  2Dh	; -
		db  19h
		db 0DDh	; 
		db 0DDh	; 
		db  2Dh	; -
		db 0DDh	; 
		db 0F1h	; 
		db  2Dh	; -
		db 0DDh	; 
		db    5
		db  2Dh	; -
		db 0DDh	; 
		db  19h
		db  2Dh	; -
		db 0DDh	; 
		db  2Dh	; -
		db  2Dh	; -
		db 0DDh	; 
		db 0DDh	; 
		db 0DDh	; 
		db 0F1h	; 
		db 0F1h	; 
		db 0DDh	; 
		db 0F1h	; 
		db    5
		db 0DDh	; 
		db 0F1h	; 
		db  19h
		db 0DDh	; 
		db 0F1h	; 
		db  2Dh	; -
		db 0DDh	; 
		db 0F1h	; 
		db 0DDh	; 
		db 0F1h	; 
		db 0F1h	; 
		db 0F1h	; 
		db 0F1h	; 
		db 0F1h	; 
		db    5
		db 0F1h	; 
		db 0F1h	; 
		db  19h
		db 0F1h	; 
		db 0F1h	; 
		db  2Dh	; -
		db 0F1h	; 
		db 0F1h	; 
		db 0DDh	; 
		db    5
		db 0F1h	; 
		db 0F1h	; 
		db    5
		db 0F1h	; 
		db    5
		db    5
		db 0F1h	; 
		db  19h
		db    5
		db 0F1h	; 
		db  2Dh	; -
		db    5
		db 0F1h	; 
		db 0DDh	; 
		db  19h
		db 0F1h	; 
		db 0F1h	; 
		db  19h
		db 0F1h	; 
		db    5
		db  19h
		db 0F1h	; 
		db  19h
		db  19h
		db 0F1h	; 
		db  2Dh	; -
		db  19h
		db 0F1h	; 
		db 0DDh	; 
		db  2Dh	; -
		db 0F1h	; 
		db 0F1h	; 
		db  2Dh	; -
		db 0F1h	; 
		db    5
		db  2Dh	; -
		db 0F1h	; 
		db  19h
		db  2Dh	; -
		db 0F1h	; 
		db  2Dh	; -
		db  2Dh	; -
		db 0F1h	; 
		db 0DDh	; 
		db 0DDh	; 
		db    5
		db 0F1h	; 
		db 0DDh	; 
		db    5
		db    5
		db 0DDh	; 
		db    5
		db  19h
		db 0DDh	; 
		db    5
		db  2Dh	; -
		db 0DDh	; 
		db    5
		db 0DDh	; 
		db 0F1h	; 
		db    5
		db 0F1h	; 
		db 0F1h	; 
		db    5
		db    5
		db 0F1h	; 
		db    5
		db  19h
		db 0F1h	; 
		db    5
		db  2Dh	; -
		db 0F1h	; 
		db    5
		db 0DDh	; 
		db    5
		db    5
		db 0F1h	; 
		db    5
		db    5
		db    5
		db    5
		db    5
		db  19h
		db    5
		db    5
		db  2Dh	; -
		db    5
		db    5
		db 0DDh	; 
		db  19h
		db    5
		db 0F1h	; 
		db  19h
		db    5
		db    5
		db  19h
		db    5
		db  19h
		db  19h
		db    5
		db  2Dh	; -
		db  19h
		db    5
		db 0DDh	; 
		db  2Dh	; -
		db    5
		db 0F1h	; 
		db  2Dh	; -
		db    5
		db    5
		db  2Dh	; -
		db    5
		db  19h
		db  2Dh	; -
		db    5
		db  2Dh	; -
		db  2Dh	; -
		db    5
		db 0DDh	; 
		db 0DDh	; 
		db  19h
		db 0F1h	; 
		db 0DDh	; 
		db  19h
		db    5
		db 0DDh	; 
		db  19h
		db  19h
		db 0DDh	; 
		db  19h
		db  2Dh	; -
		db 0DDh	; 
		db  19h
		db 0DDh	; 
		db 0F1h	; 
		db  19h
		db 0F1h	; 
		db 0F1h	; 
		db  19h
		db    5
		db 0F1h	; 
		db  19h
		db  19h
		db 0F1h	; 
		db  19h
		db  2Dh	; -
		db 0F1h	; 
		db  19h
		db 0DDh	; 
		db    5
		db  19h
		db 0F1h	; 
		db    5
		db  19h
		db    5
		db    5
		db  19h
		db  19h
		db    5
		db  19h
		db  2Dh	; -
		db    5
		db  19h
		db 0DDh	; 
		db  19h
		db  19h
		db 0F1h	; 
		db  19h
		db  19h
		db    5
		db  19h
		db  19h
		db  19h
		db  19h
		db  19h
		db  2Dh	; -
		db  19h
		db  19h
		db 0DDh	; 
		db  2Dh	; -
		db  19h
		db 0F1h	; 
		db  2Dh	; -
		db  19h
		db    5
		db  2Dh	; -
		db  19h
		db  19h
		db  2Dh	; -
		db  19h
		db  2Dh	; -
		db  2Dh	; -
		db  19h
		db 0DDh	; 
		db 0DDh	; 
		db  2Dh	; -
		db 0F1h	; 
		db 0DDh	; 
		db  2Dh	; -
		db    5
		db 0DDh	; 
		db  2Dh	; -
		db  19h
		db 0DDh	; 
		db  2Dh	; -
		db  2Dh	; -
		db 0DDh	; 
		db  2Dh	; -
		db 0DDh	; 
		db 0F1h	; 
		db  2Dh	; -
		db 0F1h	; 
		db 0F1h	; 
		db  2Dh	; -
		db    5
		db 0F1h	; 
		db  2Dh	; -
		db  19h
		db 0F1h	; 
		db  2Dh	; -
		db  2Dh	; -
		db 0F1h	; 
		db  2Dh	; -
		db 0DDh	; 
		db    5
		db  2Dh	; -
		db 0F1h	; 
		db    5
		db  2Dh	; -
		db    5
		db    5
		db  2Dh	; -
		db  19h
		db    5
		db  2Dh	; -
		db  2Dh	; -
		db    5
		db  2Dh	; -
		db 0DDh	; 
		db  19h
		db  2Dh	; -
		db 0F1h	; 
		db  19h
		db  2Dh	; -
		db    5
		db  19h
		db  2Dh	; -
		db  19h
		db  19h
		db  2Dh	; -
		db  2Dh	; -
		db  19h
		db  2Dh	; -
		db 0DDh	; 
		db  2Dh	; -
		db  2Dh	; -
		db 0F1h	; 
		db  2Dh	; -
		db  2Dh	; -
		db    5
		db  2Dh	; -
		db  2Dh	; -
		db  19h
		db  2Dh	; -
		db  2Dh	; -
		db  2Dh	; -
		db  2Dh	; -
		db  2Dh	; -
_6D9h:
		db    0
		db    0
		db    0
		db  3Fh	; ?
		db  3Fh	; ?
		db  3Fh	; ?
		db  3Fh	; ?
		db  3Fh	; ?
		db  3Fh	; ?
		db  3Fh	; ?
		db  3Fh	; ?
		db  3Fh	; ?
		db  3Eh	; >
		db  3Eh	; >
		db  3Eh	; >
		db  3Eh	; >
		db  3Eh	; >
		db  3Eh	; >
		db  3Eh	; >
		db  3Eh	; >
		db  3Eh	; >
		db  3Dh	; =
		db  3Dh	; =
		db  3Dh	; =
		db  3Dh	; =
		db  3Dh	; =
		db  3Dh	; =
		db  3Dh	; =
		db  3Dh	; =
		db  3Dh	; =
		db  3Ch	; <
		db  3Ch	; <
		db  3Ch	; <
		db  3Ch	; <
		db  3Ch	; <
		db  3Ch	; <
		db  3Ch	; <
		db  3Ch	; <
		db  3Ch	; <
		db  3Bh	; ;
		db  3Bh	; ;
		db  3Bh	; ;
		db  3Bh	; ;
		db  3Bh	; ;
		db  3Bh	; ;
		db  3Bh	; ;
		db  3Bh	; ;
		db  3Bh	; ;
		db  3Ah	; :
		db  3Ah	; :
		db  3Ah	; :
		db  3Ah	; :
		db  3Ah	; :
		db  3Ah	; :
		db  3Ah	; :
		db  3Ah	; :
		db  3Ah	; :
		db  39h	; 9
		db  39h	; 9
		db  39h	; 9
		db  39h	; 9
		db  39h	; 9
		db  39h	; 9
		db  39h	; 9
		db  39h	; 9
		db  39h	; 9
		db  38h	; 8
		db  38h	; 8
		db  38h	; 8
		db  38h	; 8
		db  38h	; 8
		db  38h	; 8
		db  38h	; 8
		db  38h	; 8
		db  38h	; 8
		db  37h	; 7
		db  37h	; 7
		db  37h	; 7
		db  37h	; 7
		db  37h	; 7
		db  37h	; 7
		db  37h	; 7
		db  37h	; 7
		db  37h	; 7
		db  36h	; 6
		db  36h	; 6
		db  36h	; 6
		db  36h	; 6
		db  36h	; 6
		db  36h	; 6
		db  36h	; 6
		db  36h	; 6
		db  36h	; 6
		db  35h	; 5
		db  35h	; 5
		db  35h	; 5
		db  35h	; 5
		db  35h	; 5
		db  35h	; 5
		db  35h	; 5
		db  35h	; 5
		db  35h	; 5
		db  34h	; 4
		db  34h	; 4
		db  34h	; 4
		db  34h	; 4
		db  34h	; 4
		db  34h	; 4
		db  34h	; 4
		db  34h	; 4
		db  34h	; 4
		db  33h	; 3
		db  33h	; 3
		db  33h	; 3
		db  33h	; 3
		db  33h	; 3
		db  33h	; 3
		db  33h	; 3
		db  33h	; 3
		db  33h	; 3
		db  32h	; 2
		db  32h	; 2
		db  32h	; 2
		db  32h	; 2
		db  32h	; 2
		db  32h	; 2
		db  32h	; 2
		db  32h	; 2
		db  32h	; 2
		db  31h	; 1
		db  31h	; 1
		db  31h	; 1
		db  31h	; 1
		db  31h	; 1
		db  31h	; 1
		db  31h	; 1
		db  31h	; 1
		db  31h	; 1
		db  30h	; 0
		db  30h	; 0
		db  30h	; 0
		db  30h	; 0
		db  30h	; 0
		db  30h	; 0
		db  30h	; 0
		db  30h	; 0
		db  30h	; 0
		db  2Fh	; /
		db  2Fh	; /
		db  2Fh	; /
		db  2Fh	; /
		db  2Fh	; /
		db  2Fh	; /
		db  2Fh	; /
		db  2Fh	; /
		db  2Fh	; /
		db  2Eh	; .
		db  2Eh	; .
		db  2Eh	; .
		db  2Eh	; .
		db  2Eh	; .
		db  2Eh	; .
		db  2Eh	; .
		db  2Eh	; .
		db  2Eh	; .
		db  2Dh	; -
		db  2Dh	; -
		db  2Dh	; -
		db  2Dh	; -
		db  2Dh	; -
		db  2Dh	; -
		db  2Dh	; -
		db  2Dh	; -
		db  2Dh	; -
		db  2Ch	; ,
		db  2Ch	; ,
		db  2Ch	; ,
		db  2Ch	; ,
		db  2Ch	; ,
		db  2Ch	; ,
		db  2Ch	; ,
		db  2Ch	; ,
		db  2Ch	; ,
		db  2Bh	; +
		db  2Bh	; +
		db  2Bh	; +
		db  2Bh	; +
		db  2Bh	; +
		db  2Bh	; +
		db  2Bh	; +
		db  2Bh	; +
		db  2Bh	; +
		db  2Ah	; *
		db  2Ah	; *
		db  2Ah	; *
		db  2Ah	; *
		db  2Ah	; *
		db  2Ah	; *
		db  2Ah	; *
		db  2Ah	; *
		db  2Ah	; *
		db  29h	; )
		db  29h	; )
		db  29h	; )
		db  29h	; )
		db  29h	; )
		db  29h	; )
		db  29h	; )
		db  29h	; )
		db  29h	; )
		db  28h	; (
		db  28h	; (
		db  28h	; (
		db  28h	; (
		db  28h	; (
		db  28h	; (
		db  28h	; (
		db  28h	; (
		db  28h	; (
		db  27h	; '
		db  27h	; '
		db  27h	; '
		db  27h	; '
		db  27h	; '
		db  27h	; '
		db  27h	; '
		db  27h	; '
		db  27h	; '
		db  26h	; &
		db  26h	; &
		db  26h	; &
		db  26h	; &
		db  26h	; &
		db  26h	; &
		db  26h	; &
		db  26h	; &
		db  26h	; &
		db  25h	; %
		db  25h	; %
		db  25h	; %
		db  25h	; %
		db  25h	; %
		db  25h	; %
		db  25h	; %
		db  25h	; %
		db  25h	; %
		db  24h	; $
		db  24h	; $
		db  24h	; $
		db  24h	; $
		db  24h	; $
		db  24h	; $
		db  24h	; $
		db  24h	; $
		db  24h	; $
		db  23h	; #
		db  23h	; #
		db  23h	; #
		db  23h	; #
		db  23h	; #
		db  23h	; #
		db  23h	; #
		db  23h	; #
		db  23h	; #
		db  22h	; "
		db  22h	; "
		db  22h	; "
		db  22h	; "
		db  22h	; "
		db  22h	; "
		db  22h	; "
		db  22h	; "
		db  22h	; "
		db  21h	; !
		db  21h	; !
		db  21h	; !
		db  21h	; !
		db  21h	; !
		db  21h	; !
		db  21h	; !
		db  21h	; !
		db  21h	; !
		db  20h
		db  20h
		db  20h
		db  20h
		db  20h
		db  20h
		db  20h
		db  20h
		db  20h
		db  1Fh
		db  1Fh
		db  1Fh
		db  1Fh
		db  1Fh
		db  1Fh
		db  1Fh
		db  1Fh
		db  1Fh
		db  1Eh
		db  1Eh
		db  1Eh
		db  1Eh
		db  1Eh
		db  1Eh
		db  1Eh
		db  1Eh
		db  1Eh
		db  1Dh
		db  1Dh
		db  1Dh
		db  1Dh
		db  1Dh
		db  1Dh
		db  1Dh
		db  1Dh
		db  1Dh
		db  1Ch
		db  1Ch
		db  1Ch
		db  1Ch
		db  1Ch
		db  1Ch
		db  1Ch
		db  1Ch
		db  1Ch
		db  1Bh
		db  1Bh
		db  1Bh
		db  1Bh
		db  1Bh
		db  1Bh
		db  1Bh
		db  1Bh
		db  1Bh
		db  1Ah
		db  1Ah
		db  1Ah
		db  1Ah
		db  1Ah
		db  1Ah
		db  1Ah
		db  1Ah
		db  1Ah
		db  19h
		db  19h
		db  19h
		db  19h
		db  19h
		db  19h
		db  19h
		db  19h
		db  19h
		db  18h
		db  18h
		db  18h
		db  18h
		db  18h
		db  18h
		db  18h
		db  18h
		db  18h
		db  17h
		db  17h
		db  17h
		db  17h
		db  17h
		db  17h
		db  17h
		db  17h
		db  17h
		db  16h
		db  16h
		db  16h
		db  16h
		db  16h
		db  16h
		db  16h
		db  16h
		db  16h
		db  15h
		db  15h
		db  15h
		db  15h
		db  15h
		db  15h
		db  15h
		db  15h
		db  15h
		db  14h
		db  14h
		db  14h
		db  14h
		db  14h
		db  14h
		db  14h
		db  14h
		db  14h
		db  13h
		db  13h
		db  13h
		db  13h
		db  13h
		db  13h
		db  13h
		db  13h
		db  13h
		db  12h
		db  12h
		db  12h
		db  12h
		db  12h
		db  12h
		db  12h
		db  12h
		db  12h
		db  11h
		db  11h
		db  11h
		db  11h
		db  11h
		db  11h
		db  11h
		db  11h
		db  11h
		db  10h
		db  10h
		db  10h
		db  10h
		db  10h
		db  10h
		db  10h
		db  10h
		db  10h
		db  0Fh
		db  0Fh
		db  0Fh
		db  0Fh
		db  0Fh
		db  0Fh
		db  0Fh
		db  0Fh
		db  0Fh
		db  0Eh
		db  0Eh
		db  0Eh
		db  0Eh
		db  0Eh
		db  0Eh
		db  0Eh
		db  0Eh
		db  0Eh
		db  0Dh
		db  0Dh
		db  0Dh
		db  0Dh
		db  0Dh
		db  0Dh
		db  0Dh
		db  0Dh
		db  0Dh
		db  0Ch
		db  0Ch
		db  0Ch
		db  0Ch
		db  0Ch
		db  0Ch
		db  0Ch
		db  0Ch
		db  0Ch
		db  0Bh
		db  0Bh
		db  0Bh
		db  0Bh
		db  0Bh
		db  0Bh
		db  0Bh
		db  0Bh
		db  0Bh
		db  0Ah
		db  0Ah
		db  0Ah
		db  0Ah
		db  0Ah
		db  0Ah
		db  0Ah
		db  0Ah
		db  0Ah
		db    9
		db    9
		db    9
		db    9
		db    9
		db    9
		db    9
		db    9
		db    9
		db    8
		db    8
		db    8
		db    8
		db    8
		db    8
		db    8
		db    8
		db    8
		db    7
		db    7
		db    7
		db    7
		db    7
		db    7
		db    7
		db    7
		db    7
		db    6
		db    6
		db    6
		db    6
		db    6
		db    6
		db    6
		db    6
		db    6
		db    5
		db    5
		db    5
		db    5
		db    5
		db    5
		db    5
		db    5
		db    5
		db    4
		db    4
		db    4
		db    4
		db    4
		db    4
		db    4
		db    4
		db    4
		db    3
		db    3
		db    3
		db    3
		db    3
		db    3
		db    3
		db    3
		db    3
		db    2
		db    2
		db    2
		db    2
		db    2
		db    2
		db    2
		db    2
		db    2
		db    1
		db    1
		db    1
		db    1
		db    1
		db    1
		db    1
		db    1
		db    1
word_913:	dw 0			; DATA XREF: sub_1DE+5w sub_1DE+5Er ...
word_915:	dw 0			; DATA XREF: sub_1DE+Dw sub_1DE+18r ...
word_917:	dw 0			; DATA XREF: sub_1DE+15w sub_1DE+23r ...
word_919:	dw 0			; DATA XREF: sub_1DE+77w sub_1DE+98r ...
word_91B:	dw 0			; DATA XREF: sub_1DE+31w sub_1DE+52r ...
word_91D:	dw 0			; DATA XREF: sub_1DE+4Ew sub_1DE+58r ...
word_91F:	dw 0			; DATA XREF: sub_16Br sub_16B+12w ...
word_921:	dw 0			; DATA XREF: sub_16B+3r sub_16B+1Dw ...
word_923:	dw 0			; DATA XREF: sub_16B+7r sub_16B+29w ...
word_925:	dw 0			; DATA XREF: start+1Fw	sub_16B+Br
word_927:	dw 0			; DATA XREF: start+25w	sub_16B+15r
word_929:	dw 0			; DATA XREF: start+2Bw	sub_16B+21r
word_92B:	dw 0			; DATA XREF: start+31w	sub_2C9r
word_92D:	dw 0			; DATA XREF: start+37w	sub_2C9+19r
word_92F:	dw 0			; DATA XREF: start+3Dw	sub_2C9+Dr ...
word_931:	dw 0			; DATA XREF: sub_1B3+7w sub_1DE+26r ...
word_933:	dw 0			; DATA XREF: sub_1B3+Aw sub_1DE+1Br ...
word_935:	dw 0			; DATA XREF: sub_1B3+15w sub_1DE+6Cr ...
word_937:	dw 0			; DATA XREF: sub_1B3+18w sub_1DE+61r ...
word_939:	dw 0			; DATA XREF: sub_1B3+23w sub_1DE+B2r ...
word_93B:	dw 0			; DATA XREF: sub_1B3+26w sub_1DE+A7r ...
word_93D:	dw 0A0h			; DATA XREF: sub_2C9+13r
word_93F:	dw 64h			; DATA XREF: sub_2C9+2Cr
_941h:
_end: