From 1b4a8acaacb524f1e92721841a17553aa5f2a2e6 Mon Sep 17 00:00:00 2001 From: sparky4 Date: Fri, 11 Sep 2015 10:20:16 -0500 Subject: [PATCH] wwww new file: 16/modex105.zip deleted: 16/modex105/ASM.BAT deleted: 16/modex105/DEMOS/BASIC7/CHARDEMO.BAS deleted: 16/modex105/DEMOS/BASIC7/MAKE-LIB.BAT deleted: 16/modex105/DEMOS/BASIC7/MODEX.BI deleted: 16/modex105/DEMOS/BASIC7/MODEX.QLB deleted: 16/modex105/DEMOS/BASIC7/TEST6.BAS deleted: 16/modex105/DEMOS/BASIC7/UASM-BC7.BAT deleted: 16/modex105/DEMOS/BASIC7/UTILS.ASM deleted: 16/modex105/DEMOS/BASIC7/UTILS.BI deleted: 16/modex105/DEMOS/C/C_UTILS.ASM deleted: 16/modex105/DEMOS/C/C_UTILS.H deleted: 16/modex105/DEMOS/C/C_UTILS.LST deleted: 16/modex105/DEMOS/C/C_UTILS.SBR deleted: 16/modex105/DEMOS/C/MODEX.ASM deleted: 16/modex105/DEMOS/C/MODEX.BI deleted: 16/modex105/DEMOS/C/MODEX.H deleted: 16/modex105/DEMOS/C/UTLS-ASM.BAT deleted: 16/modex105/DEMOS/C/X-DEMO.C deleted: 16/modex105/DEMOS/C/X-DEMO.EXE deleted: 16/modex105/DEMOS/C/X-DEMO.PRJ deleted: 16/modex105/DEMOS/C/x.exe deleted: 16/modex105/DEMOS/CHARDEMO.EXE deleted: 16/modex105/DEMOS/PASCAL/TEST5.PAS deleted: 16/modex105/DEMOS/QB45/MAKE-LIB.BAT deleted: 16/modex105/DEMOS/QB45/MODEX.BI deleted: 16/modex105/DEMOS/QB45/MODEX.QLB deleted: 16/modex105/DEMOS/QB45/TEST6A.BAS deleted: 16/modex105/DEMOS/QB45/TEST6A.EXE deleted: 16/modex105/DEMOS/QB45/UASM-QB4.BAT deleted: 16/modex105/DEMOS/QB45/UTILS.ASM deleted: 16/modex105/DEMOS/QB45/UTILS.BI deleted: 16/modex105/DEMOS/ROM_8X8.FNT deleted: 16/modex105/DEMOS/SPACEAGE.FNT deleted: 16/modex105/DEMOS/SYSTEM.FNT deleted: 16/modex105/DEMOS/TEST6.EXE deleted: 16/modex105/FONTEDIT/CHARSETS.CS deleted: 16/modex105/FONTEDIT/CSEDIT.DOC deleted: 16/modex105/FONTEDIT/CSEDIT.EXE deleted: 16/modex105/FONTEDIT/INVERSE.FNT deleted: 16/modex105/FONTEDIT/MOUSEIMG.CS deleted: 16/modex105/FONTEDIT/PALETTE.CS deleted: 16/modex105/FONTEDIT/ROM_8X8.FNT deleted: 16/modex105/FONTEDIT/SPACEAGE.FNT deleted: 16/modex105/FONTEDIT/SYSTEM.FNT deleted: 16/modex105/MODE-X.TXT deleted: 16/modex105/MODEX.ASM deleted: 16/modex105/MODEX.BI deleted: 16/modex105/MODEX.H deleted: 16/modex105/MODEX.LST deleted: 16/modex105/MODEX.SBR deleted: 16/modex105/PACKING.LST deleted: 16/modex105/PALEDIT/BAKAPI.PAL deleted: 16/modex105/PALEDIT/CHARSETS.CS deleted: 16/modex105/PALEDIT/DIAGONAL.PAL deleted: 16/modex105/PALEDIT/GAMECOLR.PAL deleted: 16/modex105/PALEDIT/MOUSEIMG.CS deleted: 16/modex105/PALEDIT/PALEDIT.DOC deleted: 16/modex105/PALEDIT/PALEDIT.EXE deleted: 16/modex105/PALEDIT/PALVIEW.EXE deleted: 16/modex105/PALEDIT/PRIME.PAL deleted: 16/modex105/PALEDIT/RGB.PAL deleted: 16/modex105/PALEDIT/SCROLL.PAL deleted: 16/modex105/README.DOC deleted: 16/modex105/modex105.zip --- 16/modex105.zip | Bin 0 -> 587231 bytes 16/modex105/ASM.BAT | 1 - 16/modex105/DEMOS/BASIC7/CHARDEMO.BAS | 164 - 16/modex105/DEMOS/BASIC7/MAKE-LIB.BAT | 5 - 16/modex105/DEMOS/BASIC7/MODEX.BI | 63 - 16/modex105/DEMOS/BASIC7/MODEX.QLB | Bin 11141 -> 0 bytes 16/modex105/DEMOS/BASIC7/TEST6.BAS | 562 ---- 16/modex105/DEMOS/BASIC7/UASM-BC7.BAT | 1 - 16/modex105/DEMOS/BASIC7/UTILS.ASM | 406 --- 16/modex105/DEMOS/BASIC7/UTILS.BI | 51 - 16/modex105/DEMOS/C/C_UTILS.ASM | 405 --- 16/modex105/DEMOS/C/C_UTILS.H | 117 - 16/modex105/DEMOS/C/C_UTILS.LST | 597 ---- 16/modex105/DEMOS/C/C_UTILS.SBR | Bin 1731 -> 0 bytes 16/modex105/DEMOS/C/MODEX.ASM | 3295 -------------------- 16/modex105/DEMOS/C/MODEX.BI | 63 - 16/modex105/DEMOS/C/MODEX.H | 76 - 16/modex105/DEMOS/C/UTLS-ASM.BAT | 1 - 16/modex105/DEMOS/C/X-DEMO.C | 780 ----- 16/modex105/DEMOS/C/X-DEMO.EXE | Bin 41090 -> 0 bytes 16/modex105/DEMOS/C/X-DEMO.PRJ | Bin 5188 -> 0 bytes 16/modex105/DEMOS/C/x.exe | Bin 41090 -> 0 bytes 16/modex105/DEMOS/CHARDEMO.EXE | Bin 13066 -> 0 bytes 16/modex105/DEMOS/PASCAL/TEST5.PAS | 488 --- 16/modex105/DEMOS/QB45/MAKE-LIB.BAT | 5 - 16/modex105/DEMOS/QB45/MODEX.BI | 63 - 16/modex105/DEMOS/QB45/MODEX.QLB | Bin 9739 -> 0 bytes 16/modex105/DEMOS/QB45/TEST6A.BAS | 561 ---- 16/modex105/DEMOS/QB45/TEST6A.EXE | Bin 40544 -> 0 bytes 16/modex105/DEMOS/QB45/UASM-QB4.BAT | 1 - 16/modex105/DEMOS/QB45/UTILS.ASM | 406 --- 16/modex105/DEMOS/QB45/UTILS.BI | 51 - 16/modex105/DEMOS/ROM_8X8.FNT | Bin 1024 -> 0 bytes 16/modex105/DEMOS/SPACEAGE.FNT | Bin 1024 -> 0 bytes 16/modex105/DEMOS/SYSTEM.FNT | Bin 1024 -> 0 bytes 16/modex105/DEMOS/TEST6.EXE | Bin 19990 -> 0 bytes 16/modex105/FONTEDIT/CHARSETS.CS | Bin 2144 -> 0 bytes 16/modex105/FONTEDIT/CSEDIT.DOC | 196 -- 16/modex105/FONTEDIT/CSEDIT.EXE | Bin 68368 -> 0 bytes 16/modex105/FONTEDIT/INVERSE.FNT | Bin 1024 -> 0 bytes 16/modex105/FONTEDIT/MOUSEIMG.CS | Bin 128 -> 0 bytes 16/modex105/FONTEDIT/PALETTE.CS | Bin 768 -> 0 bytes 16/modex105/FONTEDIT/ROM_8X8.FNT | Bin 1024 -> 0 bytes 16/modex105/FONTEDIT/SPACEAGE.FNT | Bin 1024 -> 0 bytes 16/modex105/FONTEDIT/SYSTEM.FNT | Bin 1024 -> 0 bytes 16/modex105/MODE-X.TXT | 44 - 16/modex105/MODEX.ASM | 3295 -------------------- 16/modex105/MODEX.BI | 63 - 16/modex105/MODEX.H | 76 - 16/modex105/MODEX.LST | 4122 ------------------------- 16/modex105/MODEX.SBR | Bin 12235 -> 0 bytes 16/modex105/PACKING.LST | 87 - 16/modex105/PALEDIT/BAKAPI.PAL | Bin 768 -> 0 bytes 16/modex105/PALEDIT/CHARSETS.CS | Bin 2144 -> 0 bytes 16/modex105/PALEDIT/DIAGONAL.PAL | Bin 768 -> 0 bytes 16/modex105/PALEDIT/GAMECOLR.PAL | Bin 768 -> 0 bytes 16/modex105/PALEDIT/MOUSEIMG.CS | Bin 128 -> 0 bytes 16/modex105/PALEDIT/PALEDIT.DOC | 166 - 16/modex105/PALEDIT/PALEDIT.EXE | Bin 70230 -> 0 bytes 16/modex105/PALEDIT/PALVIEW.EXE | Bin 10358 -> 0 bytes 16/modex105/PALEDIT/PRIME.PAL | Bin 768 -> 0 bytes 16/modex105/PALEDIT/RGB.PAL | Bin 768 -> 0 bytes 16/modex105/PALEDIT/SCROLL.PAL | Bin 768 -> 0 bytes 16/modex105/README.DOC | 76 - 16/modex105/modex105.zip | Bin 264999 -> 0 bytes 65 files changed, 16287 deletions(-) create mode 100755 16/modex105.zip delete mode 100755 16/modex105/ASM.BAT delete mode 100755 16/modex105/DEMOS/BASIC7/CHARDEMO.BAS delete mode 100755 16/modex105/DEMOS/BASIC7/MAKE-LIB.BAT delete mode 100755 16/modex105/DEMOS/BASIC7/MODEX.BI delete mode 100755 16/modex105/DEMOS/BASIC7/MODEX.QLB delete mode 100755 16/modex105/DEMOS/BASIC7/TEST6.BAS delete mode 100755 16/modex105/DEMOS/BASIC7/UASM-BC7.BAT delete mode 100755 16/modex105/DEMOS/BASIC7/UTILS.ASM delete mode 100755 16/modex105/DEMOS/BASIC7/UTILS.BI delete mode 100755 16/modex105/DEMOS/C/C_UTILS.ASM delete mode 100755 16/modex105/DEMOS/C/C_UTILS.H delete mode 100755 16/modex105/DEMOS/C/C_UTILS.LST delete mode 100755 16/modex105/DEMOS/C/C_UTILS.SBR delete mode 100755 16/modex105/DEMOS/C/MODEX.ASM delete mode 100755 16/modex105/DEMOS/C/MODEX.BI delete mode 100755 16/modex105/DEMOS/C/MODEX.H delete mode 100755 16/modex105/DEMOS/C/UTLS-ASM.BAT delete mode 100755 16/modex105/DEMOS/C/X-DEMO.C delete mode 100755 16/modex105/DEMOS/C/X-DEMO.EXE delete mode 100755 16/modex105/DEMOS/C/X-DEMO.PRJ delete mode 100755 16/modex105/DEMOS/C/x.exe delete mode 100755 16/modex105/DEMOS/CHARDEMO.EXE delete mode 100755 16/modex105/DEMOS/PASCAL/TEST5.PAS delete mode 100755 16/modex105/DEMOS/QB45/MAKE-LIB.BAT delete mode 100755 16/modex105/DEMOS/QB45/MODEX.BI delete mode 100755 16/modex105/DEMOS/QB45/MODEX.QLB delete mode 100755 16/modex105/DEMOS/QB45/TEST6A.BAS delete mode 100755 16/modex105/DEMOS/QB45/TEST6A.EXE delete mode 100755 16/modex105/DEMOS/QB45/UASM-QB4.BAT delete mode 100755 16/modex105/DEMOS/QB45/UTILS.ASM delete mode 100755 16/modex105/DEMOS/QB45/UTILS.BI delete mode 100755 16/modex105/DEMOS/ROM_8X8.FNT delete mode 100755 16/modex105/DEMOS/SPACEAGE.FNT delete mode 100755 16/modex105/DEMOS/SYSTEM.FNT delete mode 100755 16/modex105/DEMOS/TEST6.EXE delete mode 100755 16/modex105/FONTEDIT/CHARSETS.CS delete mode 100755 16/modex105/FONTEDIT/CSEDIT.DOC delete mode 100755 16/modex105/FONTEDIT/CSEDIT.EXE delete mode 100755 16/modex105/FONTEDIT/INVERSE.FNT delete mode 100755 16/modex105/FONTEDIT/MOUSEIMG.CS delete mode 100755 16/modex105/FONTEDIT/PALETTE.CS delete mode 100755 16/modex105/FONTEDIT/ROM_8X8.FNT delete mode 100755 16/modex105/FONTEDIT/SPACEAGE.FNT delete mode 100755 16/modex105/FONTEDIT/SYSTEM.FNT delete mode 100755 16/modex105/MODE-X.TXT delete mode 100755 16/modex105/MODEX.ASM delete mode 100755 16/modex105/MODEX.BI delete mode 100755 16/modex105/MODEX.H delete mode 100755 16/modex105/MODEX.LST delete mode 100755 16/modex105/MODEX.SBR delete mode 100755 16/modex105/PACKING.LST delete mode 100755 16/modex105/PALEDIT/BAKAPI.PAL delete mode 100755 16/modex105/PALEDIT/CHARSETS.CS delete mode 100755 16/modex105/PALEDIT/DIAGONAL.PAL delete mode 100755 16/modex105/PALEDIT/GAMECOLR.PAL delete mode 100755 16/modex105/PALEDIT/MOUSEIMG.CS delete mode 100755 16/modex105/PALEDIT/PALEDIT.DOC delete mode 100755 16/modex105/PALEDIT/PALEDIT.EXE delete mode 100755 16/modex105/PALEDIT/PALVIEW.EXE delete mode 100755 16/modex105/PALEDIT/PRIME.PAL delete mode 100755 16/modex105/PALEDIT/RGB.PAL delete mode 100755 16/modex105/PALEDIT/SCROLL.PAL delete mode 100755 16/modex105/README.DOC delete mode 100755 16/modex105/modex105.zip diff --git a/16/modex105.zip b/16/modex105.zip new file mode 100755 index 0000000000000000000000000000000000000000..3e6a48c142259358de1296b845e2ef19ddbaaea6 GIT binary patch literal 587231 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

J*vYV`0nL$|$-tY=4DE(TrSg6&OGPG> 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

jdsj-FL(}Tle&PpV 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 z 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

S@4qEq>9zBEnne9C<`gQ*QT05L=9pS5-vC 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 literal 0 HcmV?d00001 diff --git a/16/modex105/ASM.BAT b/16/modex105/ASM.BAT deleted file mode 100755 index 2e5785f9..00000000 --- a/16/modex105/ASM.BAT +++ /dev/null @@ -1 +0,0 @@ -MASM modex,modex,modex,nul \ No newline at end of file diff --git a/16/modex105/DEMOS/BASIC7/CHARDEMO.BAS b/16/modex105/DEMOS/BASIC7/CHARDEMO.BAS deleted file mode 100755 index 627e3278..00000000 --- a/16/modex105/DEMOS/BASIC7/CHARDEMO.BAS +++ /dev/null @@ -1,164 +0,0 @@ -DEFINT A-Z -DECLARE SUB PRINT.STRING (Text$, Xpos%, Ypos%, Colour%) -DECLARE FUNCTION MakePal$ (Red%, Green%, Blue%) -DECLARE SUB LOAD.FONT (FontFile$, FontNum%) -DECLARE SUB ERROR.OUT (Text$) - - REM $INCLUDE: 'MODEX.BI' - - REM $INCLUDE: 'UTILS.BI' - -TYPE FONT - SetData AS STRING * 1024 -END TYPE - - -TYPE VGAPalette - PalData AS STRING * 768 -END TYPE - - - ' Alternate form of LOAD_DAC_REGISTERS so we can pass an offset into - ' a String instead of the Address of the String - -DECLARE SUB LOAD.DACS ALIAS "LOAD_DAC_REGISTERS" (BYVAL Addr&, BYVAL StartReg%, BYVAL EndReg%, BYVAL VSync%) - - - ' - 'MODE X DEMO of Multiple Character Sets and Block Color Cycling - ' - 'By Matt Pritchard - ' - -COMMON SHARED CharSet() AS FONT - -DIM Pal AS VGAPalette - - REM $DYNAMIC - -DIM SHARED CharSet(0 TO 3) AS FONT - - - LOAD.FONT "SYSTEM.FNT", 0 - LOAD.FONT "ROM_8x8.FNT", 1 - LOAD.FONT "SPACEAGE.FNT", 2 - - - IF SET.MODEX(Mode320x240) = False THEN - ERROR.OUT "ERROR SETTING MODE X" - END IF - - - A$ = "": B$ = "" - FOR X = 0 TO 31: A$ = A$ + MakePal$(31 - X, X, 0): NEXT X - FOR X = 0 TO 31: A$ = A$ + MakePal$(0, 31 - X, X): NEXT X - FOR X = 0 TO 31: A$ = A$ + MakePal$(X, 0, 31 - X): NEXT X - - FOR X = 0 TO 31: B$ = B$ + MakePal$(31 - X, X, X): NEXT X - FOR X = 0 TO 31: B$ = B$ + MakePal$(X, 31 - X, X): NEXT X - FOR X = 0 TO 31: B$ = B$ + MakePal$(X, X, 31 - X): NEXT X - - Black$ = STRING$(192, 0) - White$ = STRING$(128 * 3, 48) - - Pal1$ = Black$ + A$ + A$ + B$ + B$ + A$ - - LOAD.DACS SSEGADD(Black$), 64, 127, 1 - LOAD.DACS SSEGADD(Black$), 20, 63, 0 - - LOAD.DACS SSEGADD(White$), 128, 255, 0 - - '*** Background *** - - FOR X = 0 TO 319 - FOR Y = 0 TO 239 - IF ((X + Y) AND 1) = 1 THEN SET.POINT X, Y, 64 + X \ 5 ELSE SET.POINT X, Y, 20 + Y \ 6 - NEXT Y - NEXT X - - '*** Draw Font Displays *** - - PRINT.STRING "FONT: SYSTEM.FNT", 11, 7, 15 - PRINT.STRING "FONT: ROM_8x8.FNT", 11, 17, 15 - PRINT.STRING "FONT: SPACEAGE.FNT", 11, 27, 15 - PRINT.STRING "PRESS ANY KEY TO CONTINUE", 8, 29, 14 - - - FOR F = 0 TO 2 - SET.DISPLAY.FONT CharSet(F), 1 - Yp = F * 80 + 10 - FOR Y = 0 TO 96 STEP 32 - FOR X = 0 TO 31 - TGPRINTC 128 + Y + X, X * 10 + 1, Yp, 128 + Y - NEXT X - Yp = Yp + 10 - NEXT Y - NEXT F - - DO - LOOP UNTIL SCAN.KEYBOARD - - Offset = 0 - Restart = 192 - MaxOfs = 192 + 96 * 6 - - Delay = 100 - - Offset2 = 0 - Offset2Dir = 3 - Offset2Min = 192 - Offset2Max = Offset2Min + 192 * 6 - - DO - LOAD.DACS SSEGADD(Pal1$) + Offset, 64, 127, 1 - Offset = Offset + 3 - IF Offset >= MaxOfs THEN Offset = Restart - IF Delay THEN - Delay = Delay - 1 - ELSE - LOAD.DACS SSEGADD(Pal1$) + Offset2, 20, 60, 0 - IF Offset2 = Offset2Max THEN Offset2Dir = -3 - IF Offset2 = Offset2Min THEN Offset2Dir = 3 - Offset2 = Offset2 + Offset2Dir - END IF - - LOOP UNTIL SCAN.KEYBOARD - - ERROR.OUT "DEMO OVER" - -REM $STATIC -SUB ERROR.OUT (Text$) - - SET.VIDEO.MODE 3 - - DOS.PRINT Text$ - - END - -END SUB - -SUB LOAD.FONT (FontFile$, FontNum) STATIC - - IF LEN(DIR$(FontFile$)) = 0 THEN ERROR.OUT "FILE NOT FOUND: " + FontFile$ - - OPEN FontFile$ FOR BINARY AS #1 - - SEEK #1, 1 - GET #1, , CharSet(FontNum) - - CLOSE #1 - -END SUB - -FUNCTION MakePal$ (Red, Green, Blue) STATIC - - MakePal$ = CHR$(Red) + CHR$(Green) + CHR$(Blue) - -END FUNCTION - -SUB PRINT.STRING (Text$, Xpos, Ypos, Colour) - - TPRINT.STR SSEG(Text$), SADD(Text$), LEN(Text$), Xpos * 8, Ypos * 8, Colour - -END SUB - diff --git a/16/modex105/DEMOS/BASIC7/MAKE-LIB.BAT b/16/modex105/DEMOS/BASIC7/MAKE-LIB.BAT deleted file mode 100755 index fc0b3b5c..00000000 --- a/16/modex105/DEMOS/BASIC7/MAKE-LIB.BAT +++ /dev/null @@ -1,5 +0,0 @@ -ECHO ... Building MODEX.QLB for BASIC PDS 7.1 -LIB MODEX -+MODEX,, -LIB MODEX -+UTILS,, -DEL MODEX.BAK -LINK /Q MODEX+UTILS, MODEX.QLB, NUL, C:\BC7\LIB\QBXQLB.LIB; diff --git a/16/modex105/DEMOS/BASIC7/MODEX.BI b/16/modex105/DEMOS/BASIC7/MODEX.BI deleted file mode 100755 index 6b1d7afe..00000000 --- a/16/modex105/DEMOS/BASIC7/MODEX.BI +++ /dev/null @@ -1,63 +0,0 @@ - - ' ===== SCREEN RESOLUTIONS ===== - -CONST Mode320x200 = 0, Mode320x400 = 1 -CONST Mode360x200 = 2, Mode360x400 = 3 -CONST Mode320x240 = 4, Mode320x480 = 5 -CONST Mode360x240 = 6, Mode360x480 = 7 - - ' ===== MODE X SETUP ROUTINES ===== - -DECLARE FUNCTION SET.VGA.MODEX% ALIAS "SET_VGA_MODEX" (BYVAL ModeType%, BYVAL MaxXpos%, BYVAL MaxYpos%, BYVAL Pages%) -DECLARE FUNCTION SET.MODEX% ALIAS "SET_MODEX" (BYVAL Mode%) - - ' ===== BASIC GRAPHICS PRIMITIVES ===== - -DECLARE SUB CLEAR.VGA.SCREEN ALIAS "CLEAR_VGA_SCREEN" (BYVAL ColorNum%) -DECLARE SUB SET.POINT ALIAS "SET_POINT" (BYVAL Xpos%, BYVAL Ypos%, BYVAL ColorNum%) -DECLARE FUNCTION READ.POINT% ALIAS "READ_POINT" (BYVAL Xpos%, BYVAL Ypos%) -DECLARE SUB FILL.BLOCK ALIAS "FILL_BLOCK" (BYVAL Xpos1%, BYVAL Ypos1%, BYVAL Xpos2%, BYVAL Ypos2%, BYVAL ColorNum%) -DECLARE SUB DRAW.LINE ALIAS "DRAW_LINE" (BYVAL Xpos1%, BYVAL Ypos1%, BYVAL Xpos2%, BYVAL Ypos2%, BYVAL ColorNum%) - - ' ===== DAC COLOR REGISTER ROUTINES ===== - -DECLARE SUB SET.DAC.REGISTER ALIAS "SET_DAC_REGISTER" (BYVAL RegNo%, BYVAL Red%, BYVAL Green%, BYVAL Blue%) -DECLARE SUB GET.DAC.REGISTER ALIAS "GET_DAC_REGISTER" (BYVAL RegNo%, Red%, Green%, Blue%) -DECLARE SUB LOAD.DAC.REGISTERS ALIAS "LOAD_DAC_REGISTERS" (SEG PalData AS ANY, BYVAL StartReg%, BYVAL EndReg%, BYVAL VSync%) -DECLARE SUB READ.DAC.REGISTERS ALIAS "READ_DAC_REGISTERS" (SEG PalData AS ANY, BYVAL StartReg%, BYVAL EndReg%) - - - ' ===== PAGE FLIPPING AND SCROLLING ROUTINES ===== - -DECLARE SUB SET.ACTIVE.PAGE ALIAS "SET_ACTIVE_PAGE" (BYVAL PageNo%) -DECLARE FUNCTION GET.ACTIVE.PAGE% ALIAS "GET_ACTIVE_PAGE" -DECLARE SUB SET.DISPLAY.PAGE ALIAS "SET_DISPLAY_PAGE" (BYVAL PageNo%) -DECLARE FUNCTION GET.DISPLAY.PAGE% ALIAS "GET_DISPLAY_PAGE" -DECLARE SUB SET.WINDOW ALIAS "SET_WINDOW" (BYVAL DisplayPage%, BYVAL XOffset%, BYVAL YOffset%) -DECLARE FUNCTION GET.X.OFFSET% ALIAS "GET_X_OFFSET" () -DECLARE FUNCTION GET.Y.OFFSET% ALIAS "GET_Y_OFFSET" () -DECLARE SUB SYNC.DISPLAY ALIAS "SYNC_DISPLAY" - - ' ===== TEXT DISPLAY ROUTINES ===== - -DECLARE SUB GPRINTC (BYVAL CharacterNum%, BYVAL Xpos%, BYVAL Ypos%, BYVAL ColorF%, BYVAL ColorB%) -DECLARE SUB TGPRINTC (BYVAL CharacterNum%, BYVAL Xpos%, BYVAL Ypos%, BYVAL ColorF%) -DECLARE SUB PRINT.STR ALIAS "PRINT_STR" (BYVAL StrSeg%, BYVAL StrOfs%, BYVAL MaxLen%, BYVAL Xpos%, BYVAL Ypos%, BYVAL ColorF%, BYVAL ColorB%) -DECLARE SUB TPRINT.STR ALIAS "TPRINT_STR" (BYVAL StrSeg%, BYVAL StrOfs%, BYVAL MaxLen%, BYVAL Xpos%, BYVAL Ypos%, BYVAL ColorF%) -DECLARE SUB SET.DISPLAY.FONT ALIAS "SET_DISPLAY_FONT" (SEG FontData AS ANY, BYVAL FontNumber%) - - ' ===== BITMAP (SPRITE) DISPLAY ROUTINES ===== - -DECLARE SUB DRAW.BITMAP ALIAS "DRAW_BITMAP" (SEG Image AS ANY, BYVAL Xpos%, BYVAL Ypos%, BYVAL xWidth%, BYVAL Height%) -DECLARE SUB TDRAW.BITMAP ALIAS "TDRAW_BITMAP" (SEG Image AS ANY, BYVAL Xpos%, BYVAL Ypos%, BYVAL xWidth%, BYVAL Height%) - - ' ==== VIDEO MEMORY to VIDEO MEMORY COPY ROUTINES ===== - -DECLARE SUB COPY.PAGE ALIAS "COPY_PAGE" (BYVAL SourcePage%, BYVAL DestPage%) -DECLARE SUB COPY.BITMAP ALIAS "COPY_BITMAP" (BYVAL SourcePage%, BYVAL X1%, BYVAL Y1%, BYVAL X2%, BYVAL Y2%, BYVAL DestPage%, BYVAL DestX1%, BYVAL DestY1%) - - - - - - diff --git a/16/modex105/DEMOS/BASIC7/MODEX.QLB b/16/modex105/DEMOS/BASIC7/MODEX.QLB deleted file mode 100755 index 70d22db30925923e0b60160c34b8aa97949e70d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11141 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 diff --git a/16/modex105/DEMOS/BASIC7/TEST6.BAS b/16/modex105/DEMOS/BASIC7/TEST6.BAS deleted file mode 100755 index 220a67ba..00000000 --- a/16/modex105/DEMOS/BASIC7/TEST6.BAS +++ /dev/null @@ -1,562 +0,0 @@ -'File: TEST6.BAS -'Descp.: A Mode "X" demonstration -'Author: Matt Pritchard -'Date: 14 April, 1993 -' -DECLARE SUB DEMO.RES (Mode%, Xmax%, Ymax%) -DECLARE SUB ERROR.OUT (Message$) -DECLARE FUNCTION GET.KEY% () -DECLARE SUB LOAD.SHAPES () -DECLARE SUB PAGE.DEMO () -DECLARE SUB PRINT.TEXT (Text$, Xpos%, Ypos%, ColorF%, ColorB%) -DECLARE SUB TPRINT.TEXT (Text$, Xpos%, Ypos%, ColorF%) -DEFINT A-Z - - -TYPE ShapeType - ImgData AS STRING * 512 - xWidth AS INTEGER - yWidth AS INTEGER -END TYPE - -TYPE Sprite - Xpos AS INTEGER - Ypos AS INTEGER - XDir AS INTEGER - YDir AS INTEGER - Shape AS INTEGER -END TYPE - - -CONST MaxShapes = 32 - - REM $INCLUDE: 'UTILS.BI' - REM $INCLUDE: 'MODEX.BI' - -DIM SHARED Img(32) AS ShapeType -COMMON SHARED Img() AS ShapeType - - - CALL INIT.RANDOM - - CALL LOAD.SHAPES - - CALL DEMO.RES(Mode320x200, 320, 200) - CALL DEMO.RES(Mode320x400, 320, 400) - - CALL DEMO.RES(Mode360x200, 360, 200) - CALL DEMO.RES(Mode360x400, 360, 400) - - CALL DEMO.RES(Mode320x240, 320, 240) - CALL DEMO.RES(Mode320x480, 320, 480) - - CALL DEMO.RES(Mode360x240, 360, 240) - CALL DEMO.RES(Mode360x480, 360, 480) - - CALL PAGE.DEMO - - SET.VIDEO.MODE 3 - DOS.PRINT "THIS MODE X DEMO IS FINISHED" - END - -SUB DEMO.RES (Mode, Xmax, Ymax) - - IF SET.MODEX%(Mode) = 0 THEN - ERROR.OUT "Unable to SET_MODEX" + STR$(Mode) - END IF - - XCenter = Xmax \ 2 - - X1 = 10 - Y1 = 10 - X2 = Xmax - 1 - Y2 = Ymax - 1 - - FOR Z = 0 TO 3 - Colr = 31 - Z * 2 - DRAW.LINE X1 + Z, Y1 + Z, X2 - Z, Y1 + Z, Colr - DRAW.LINE X1 + Z, Y1 + Z, X1 + Z, Y2 - Z, Colr - DRAW.LINE X1 + Z, Y2 - Z, X2 - Z, Y2 - Z, Colr - DRAW.LINE X2 - Z, Y1 + Z, X2 - Z, Y2 - Z, Colr - NEXT Z - - XChars = Xmax \ 10 - YChars = Ymax \ 10 - - FOR X = 0 TO XChars - 1 - TGPRINTC 48 + ((X + 1) MOD 10), X * 10 + 1, 1, 9 + ((X \ 8) MOD 7) - DRAW.LINE X * 10 + 9, 0, X * 10 + 9, 3, 15 - NEXT X - - FOR Y = 0 TO YChars - 1 - TGPRINTC 48 + ((Y + 1) MOD 10), 1, Y * 10 + 1, 9 + ((Y \ 10) MOD 7) - DRAW.LINE 0, Y * 10 + 9, 3, Y * 10 + 9, 15 - NEXT Y - - ' Draw Lines - - FOR X = 0 TO 63 - N = 15 + X * .75 - SET.DAC.REGISTER 64 + X, N, N, N - SET.DAC.REGISTER 128 + X, 0, N, N - - DRAW.LINE 103 - X, 60, 40 + X, 123, 64 + X - DRAW.LINE 40, 60 + X, 103, 123 - X, 128 + X - - NEXT X - TPRINT.TEXT "LINE TEST", 37, 130, c.BLUE - - Y = 60: Gap = 0 - FOR X = 0 TO 9 - FILL.BLOCK 120, Y, 120 + X, Y + Gap, 64 + X - FILL.BLOCK 140 - (15 - X), Y, 150 + X, Y + Gap, 230 + X - FILL.BLOCK 170 - (15 - X), Y, 170, Y + Gap, 128 + X - Y = Y + Gap + 2 - Gap = Gap + 1 - NEXT X - TPRINT.TEXT "FILL TEST", 110, 46, c.GREEN - - - FOR X = 190 TO 250 STEP 2 - FOR Y = 60 TO 122 STEP 2 - SET.POINT X, Y, X + Y + X + Y - NEXT Y - NEXT X - - TPRINT.TEXT "PIXEL TEST", 182, 130, c.RED - - FOR X = 190 TO 250 STEP 2 - FOR Y = 60 TO 122 STEP 2 - IF READ.POINT(X, Y) <> ((X + Y + X + Y) AND 255) THEN - ERROR.OUT "READ.PIXEL Failure" - END IF - NEXT Y - NEXT X - - - - Msg$ = " This is a MODE X demo " - PRINT.TEXT Msg$, XCenter - (LEN(Msg$) * 4), 20, c.bRED, c.BLUE - Msg$ = "Screen Resolution is by " - Xp = XCenter - (LEN(Msg$) * 4) - PRINT.TEXT Msg$, Xp, 30, c.bGREEN, c.BLACK - - PRINT.TEXT LTRIM$(STR$(Xmax)), Xp + 8 * 21, 30, c.bPURPLE, c.BLACK - PRINT.TEXT LTRIM$(STR$(Ymax)), Xp + 8 * 28, 30, c.bWHITE, c.BLACK - - FOR X = 0 TO 15 - SET.DAC.REGISTER 230 + X, 63 - X * 4, 0, 15 + X * 3 - DRAW.LINE 30 + X, Ymax - 6 - X, Xmax - 20 - X, Ymax - 6 - X, 230 + X - NEXT X - TPRINT.TEXT "Press to Continue", XCenter - (26 * 4), Ymax - 18, c.YELLOW - - X = GET.KEY% - IF X = KyESC THEN ERROR.OUT "ABORT" - -END SUB - -SUB ERROR.OUT (Message$) - - SET.VIDEO.MODE 3 - DOS.PRINT Message$ - END - -END SUB - -FUNCTION GET.KEY% - - DO - X = SCAN.KEYBOARD - LOOP UNTIL X - - GET.KEY% = X - -END FUNCTION - -SUB LOAD.SHAPES - -DIM Grid(1 TO 32, 1 TO 32) - - FOR Shape = 0 TO MaxShapes - 1 - - FOR Y = 1 TO 32 - FOR X = 1 TO 32 - Grid(X, Y) = 0 - NEXT X - NEXT Y - - Style = RANDOM.INT(6) - Colour = 1 + RANDOM.INT(15) - - SELECT CASE Style - - CASE 0: ' Solid Box - - DO - xWidth = 3 + RANDOM.INT(30) - yWidth = 3 + RANDOM.INT(30) - LOOP UNTIL ((xWidth * yWidth) <= 512) - - FOR Y = 1 TO yWidth - FOR X = 1 TO xWidth - Grid(X, Y) = Colour - NEXT X - NEXT Y - - CASE 1: ' Hollow Box - - DO - xWidth = 5 + RANDOM.INT(28) - yWidth = 5 + RANDOM.INT(28) - LOOP UNTIL ((xWidth * yWidth) <= 512) - - FOR Y = 1 TO yWidth - FOR X = 1 TO xWidth - Grid(X, Y) = Colour - NEXT X - NEXT Y - - HollowX = 1 + RANDOM.INT(xWidth \ 2 - 1) - HollowY = 1 + RANDOM.INT(yWidth \ 2 - 1) - - FOR Y = HollowY + 1 TO yWidth - HollowY - FOR X = HollowX + 1 TO xWidth - HollowX - Grid(X, Y) = nil - NEXT X - NEXT Y - - CASE 2: ' Solid Diamond - - xWidth = 3 + 2 * RANDOM.INT(10) - yWidth = xWidth - Centre = xWidth \ 2 - - FOR Y = 0 TO Centre - FOR X = 0 TO Y - Grid(Centre - X + 1, Y + 1) = Colour - Grid(Centre + X + 1, Y + 1) = Colour - Grid(Centre - X + 1, yWidth - Y) = Colour - Grid(Centre + X + 1, yWidth - Y) = Colour - NEXT X - NEXT Y - - - CASE 3: ' Hollow Diamond - - - xWidth = 3 + 2 * RANDOM.INT(10) - yWidth = xWidth - Centre = xWidth \ 2 - sWidth = RANDOM.INT(Centre) - - FOR Y = 0 TO Centre - FOR X = 0 TO Y - IF X + (Centre - Y) >= sWidth THEN - Grid(Centre - X + 1, Y + 1) = Colour - Grid(Centre + X + 1, Y + 1) = Colour - Grid(Centre - X + 1, yWidth - Y) = Colour - Grid(Centre + X + 1, yWidth - Y) = Colour - END IF - NEXT X - NEXT Y - - CASE 4: ' Ball - - xWidth = 7 + 2 * RANDOM.INT(8) - yWidth = xWidth - Centre = 1 + xWidth \ 2 - - FOR Y = 1 TO yWidth - FOR X = 1 TO xWidth - D = SQR(((Centre - X) * (Centre - X)) + ((Centre - Y) * (Centre - Y))) - IF D < Centre THEN Grid(X, Y) = 150 + Colour * 2 + D * 3 - NEXT X - NEXT Y - - CASE 5: ' Ball - - - xWidth = 7 + 2 * RANDOM.INT(8) - yWidth = xWidth - Centre = 1 + xWidth \ 2 - sWidth = RANDOM.INT(xWidth) - - FOR Y = 1 TO yWidth - FOR X = 1 TO xWidth - D = SQR(((Centre - X) * (Centre - X)) + ((Centre - Y) * (Centre - Y))) - IF D < Centre AND D >= sWidth THEN Grid(X, Y) = 150 + Colour * 2 + D * 3 - NEXT X - NEXT Y - - END SELECT - - Img(Shape).xWidth = xWidth - Img(Shape).yWidth = yWidth - - A$ = STRING$(xWidth * yWidth, nil) - - c = 1 - FOR Y = 1 TO yWidth - FOR X = 1 TO xWidth - MID$(A$, c, 1) = CHR$(Grid(X, Y)) - c = c + 1 - NEXT X - NEXT Y - - Img(Shape).ImgData = A$ - - - NEXT Shape - -END SUB - -SUB PAGE.DEMO - -CONST MaxSprites = 64 - -DIM Obj(MaxSprites) AS Sprite -DIM LastX(MaxSprites, 1), LastY(MaxSprites, 1) -DIM LastObjects(1) - - ScreenX = 360: ScreenY = 240 - - IF SET.VGA.MODEX%(Mode320x200, ScreenX, ScreenY, 3) = 0 THEN - ERROR.OUT "Unable to SET_VGA_MODEX" + STR$(Mode) - END IF - - SET.ACTIVE.PAGE 0 - - CLEAR.VGA.SCREEN c.BLACK - - PRINT.TEXT "This is a Test of the Following Functions:", 10, 9, c.bWHITE, c.BLACK - - DRAW.LINE 10, 18, 350, 18, c.YELLOW - PRINT.TEXT "SET_ACTIVE_PAGE", 10, 20, c.bBLUE, c.BLACK - PRINT.TEXT "SET_DISPLAY_PAGE", 10, 30, c.GREEN, c.BLACK - PRINT.TEXT "SET_DAC_REGISTER", 10, 40, c.RED, c.BLACK - PRINT.TEXT "CLEAR_VGA_SCREEN", 10, 50, c.CYAN, c.BLACK - - PRINT.TEXT "TDRAW_BITMAP", 10, 60, c.PURPLE, c.BLACK - PRINT.TEXT "COPY_PAGE", 10, 70, c.GREEN, c.BLACK - PRINT.TEXT "COPY_BITMAP", 10, 80, c.CYAN, c.BLACK - - PRINT.TEXT "GPRINTC", 10, 90, c.BLUE, c.BLACK - PRINT.TEXT "TGPRINTC", 10, 100, c.GREEN, c.BLACK - PRINT.TEXT "SET_WINDOW", 10, 110, c.RED, c.BLACK - - PRINT.TEXT "VIRTUAL SCREEN SIZES", 190, 20, c.bBLUE, c.BLACK - PRINT.TEXT " SMOOTH SCROLLING", 190, 30, c.GREEN, c.BLACK - PRINT.TEXT " SPRITE ANIMATION", 190, 40, c.CYAN, c.BLACK - PRINT.TEXT " PAGE FLIPPING", 190, 50, c.RED, c.BLACK - PRINT.TEXT " COLOR CYCLING", 190, 60, c.PURPLE, c.BLACK - - - FOR X = 0 TO 60 - SET.DAC.REGISTER 50 + X, 3 + X, 0, 60 - X - SET.DAC.REGISTER 150 + X, 3 + X, 0, 60 - X - NEXT X - - c = 0: DC = 1 - FOR X = 0 TO ScreenX \ 2 - DRAW.LINE ScreenX \ 2 - 1, ScreenY \ 4, X, ScreenY - 1, c + 50 - DRAW.LINE ScreenX \ 2, ScreenY \ 4, ScreenX - X - 1, ScreenY - 1, c + 50 - c = c + DC - IF c = 0 OR c = 60 THEN DC = -DC - NEXT X - - TPRINT.TEXT "Press to Continue", 72, 190, c.bWHITE - TPRINT.TEXT "< > = Faster < > = Slower", 72, 204, c.bGREEN - TPRINT.TEXT "< > = Fewer Shapes < > = More Shapes", 32, 218, c.bCYAN - - TGPRINTC 43, 80, 204, c.YELLOW - TGPRINTC 45, 200, 204, c.YELLOW - - TGPRINTC 25, 40, 218, c.YELLOW - TGPRINTC 24, 200, 218, c.YELLOW - - COPY.PAGE 0, 1 - COPY.PAGE 0, 2 - - FOR X = 1 TO MaxSprites - DO - Obj(X).XDir = RANDOM.INT(7) - 3 - Obj(X).YDir = RANDOM.INT(7) - 3 - LOOP WHILE (Obj(X).XDir = 0 AND Obj(X).YDir = 0) - - Obj(X).Shape = X MOD MaxShapes - - SpriteX = Img(Obj(X).Shape).xWidth - SpriteY = Img(Obj(X).Shape).yWidth - - Obj(X).Xpos = 1 + RANDOM.INT(ScreenX - SpriteX - 2) - Obj(X).Ypos = 1 + RANDOM.INT(ScreenY - SpriteY - 2) - - LastX(X, 0) = Obj(X).Xpos - LastX(X, 1) = Obj(X).Xpos - LastY(X, 0) = Obj(X).Ypos - LastY(X, 1) = Obj(X).Ypos - NEXT X - - CurrentPage = 0 - - 'View Shift... - - ViewX = 0 - ViewY = 0 - ViewMax = 3 - ViewCnt = 0 - ViewXD = 1 - ViewYD = 1 - - SetColor = 3: SDir = 1 - PrevColor = 0: PDir = 1 - - VisObjects = MaxSprites \ 2 - LastObjects(0) = 0 - LastObjects(1) = 0 - -DRAW.LOOP: - - - SET.ACTIVE.PAGE CurrentPage - - ' Erase Old Images - - FOR X = 1 TO LastObjects(CurrentPage) - - X1 = LastX(X, CurrentPage) AND &HFFFC - Y1 = LastY(X, CurrentPage) - X2 = ((LastX(X, CurrentPage) + Img(Obj(X).Shape).xWidth)) OR 3 - Y2 = Y1 + Img(Obj(X).Shape).yWidth - 1 - - COPY.BITMAP 2, X1, Y1, X2, Y2, CurrentPage, X1, Y1 - - NEXT X - - ' Draw new images - - FOR X = 1 TO VisObjects - - SpriteX = Img(Obj(X).Shape).xWidth - SpriteY = Img(Obj(X).Shape).yWidth - - ' Move Sprite - -REDOX: - NewX = Obj(X).Xpos + Obj(X).XDir - IF NewX < 0 OR NewX + SpriteX > ScreenX THEN - Obj(X).XDir = -Obj(X).XDir - IF RANDOM.INT(20) = 1 THEN - DO - Obj(X).XDir = RANDOM.INT(7) - 3 - Obj(X).YDir = RANDOM.INT(7) - 3 - LOOP WHILE (Obj(X).XDir = 0 AND Obj(X).YDir = 0) - GOTO REDOX - END IF - END IF - Obj(X).Xpos = Obj(X).Xpos + Obj(X).XDir - -REDOY: - NewY = Obj(X).Ypos + Obj(X).YDir - IF NewY < 0 OR NewY + SpriteY > ScreenY THEN - Obj(X).YDir = -Obj(X).YDir - IF RANDOM.INT(20) = 1 THEN - DO - Obj(X).XDir = RANDOM.INT(7) - 3 - Obj(X).YDir = RANDOM.INT(7) - 3 - LOOP WHILE (Obj(X).XDir = 0 AND Obj(X).YDir = 0) - GOTO REDOY - END IF - END IF - Obj(X).Ypos = Obj(X).Ypos + Obj(X).YDir - - 'Draw Sprite - - TDRAW.BITMAP Img(Obj(X).Shape), Obj(X).Xpos, Obj(X).Ypos, SpriteX, SpriteY - - LastX(X, CurrentPage) = Obj(X).Xpos - LastY(X, CurrentPage) = Obj(X).Ypos - - NEXT X - - LastObjects(CurrentPage) = VisObjects - - ' Pan Screen Back & Forth - - ViewCnt = ViewCnt + 1 - IF ViewCnt >= ViewMax THEN - ViewX = ViewX + ViewXD - IF ViewX = 0 OR ViewX = 39 THEN ViewXD = -ViewXD - IF ViewXD < 0 THEN - ViewY = ViewY + ViewYD - IF ViewY = 0 OR ViewY = 39 THEN ViewYD = -ViewYD - END IF - - SET.WINDOW CurrentPage, ViewX, ViewY - - ViewCnt = 0 - ELSE - SET.DISPLAY.PAGE CurrentPage - END IF - - ' Cycle Colors - - SET.DAC.REGISTER 50 + PrevColor, 3 + PrevColor, 0, 60 - PrevColor - SET.DAC.REGISTER 50 + SetColor, SetColor, 10, 63 - SetColor - - SET.DAC.REGISTER 150 + PrevColor, 3 + PrevColor, 0, 60 - PrevColor - SET.DAC.REGISTER 150 + SetColor, 63, 63, SetColor - - SetColor = SetColor + SDir - IF SetColor = 60 OR SetColor = 0 THEN SDir = -SDir - - PrevColor = PrevColor + PDir - IF PrevColor = 60 OR PrevColor = 0 THEN PDir = -PDir - - CurrentPage = 1 - CurrentPage - - Code = SCAN.KEYBOARD - - IF Code = False THEN GOTO DRAW.LOOP - - IF Code = KyPlus THEN - IF ViewMax < 12 THEN ViewMax = ViewMax + 1 - GOTO DRAW.LOOP - END IF - - IF Code = KyMinus THEN - IF ViewMax > 1 THEN ViewMax = ViewMax - 1 - IF ViewCnt >= ViewMax THEN ViewCnt = 0 - GOTO DRAW.LOOP - END IF - - IF Code = KyUp THEN - IF VisObjects < MaxSprites THEN VisObjects = VisObjects + 1 - GOTO DRAW.LOOP - END IF - - IF Code = KyDown THEN - IF VisObjects > 1 THEN VisObjects = VisObjects - 1 - GOTO DRAW.LOOP - END IF - - -END SUB - -SUB PRINT.TEXT (Text$, Xpos, Ypos, ColorF, ColorB) - - IF LEN(Text$) = 0 THEN EXIT SUB - - PRINT.STR SSEG(Text$), SADD(Text$), LEN(Text$), Xpos, Ypos, ColorF, ColorB - - -END SUB - -SUB TPRINT.TEXT (Text$, Xpos, Ypos, ColorF) - - IF LEN(Text$) = 0 THEN EXIT SUB - - TPRINT.STR SSEG(Text$), SADD(Text$), LEN(Text$), Xpos, Ypos, ColorF - -END SUB - diff --git a/16/modex105/DEMOS/BASIC7/UASM-BC7.BAT b/16/modex105/DEMOS/BASIC7/UASM-BC7.BAT deleted file mode 100755 index 5ad67fb5..00000000 --- a/16/modex105/DEMOS/BASIC7/UASM-BC7.BAT +++ /dev/null @@ -1 +0,0 @@ -MASM /DFARSTRINGS utils, utils, utils, nul; \ No newline at end of file diff --git a/16/modex105/DEMOS/BASIC7/UTILS.ASM b/16/modex105/DEMOS/BASIC7/UTILS.ASM deleted file mode 100755 index 811b8f8e..00000000 --- a/16/modex105/DEMOS/BASIC7/UTILS.ASM +++ /dev/null @@ -1,406 +0,0 @@ -;======================================================= -;=== UTILS.ASM - Asm Utilities for QuickBasic/BC7 === -;======================================================= - - PAGE 255, 132 - - .MODEL Medium - .286 - - ; ==== MACROS ==== - - ; macros to PUSH and POP multiple registers - -PUSHx MACRO R1, R2, R3, R4, R5, R6, R7, R8 - IFNB - push R1 ; Save R1 - PUSHx R2, R3, R4, R5, R6, R7, R8 - ENDIF -ENDM - -POPx MACRO R1, R2, R3, R4, R5, R6, R7, R8 - IFNB - pop R1 ; Restore R1 - POPx R2, R3, R4, R5, R6, R7, R8 - ENDIF -ENDM - - ; Macro to Clear a Register to 0 - -CLR MACRO Register - xor Register, Register ; Set Register = 0 -ENDM - - ; Macros to Decrement Counter & Jump on Condition - -LOOPx MACRO Register, Destination - dec Register ; Counter-- - jnz Destination ; Jump if not 0 -ENDM - -LOOPjz MACRO Register, Destination - dec Register ; Counter-- - jz Destination ; Jump if 0 -ENDM - - - ; ==== General Constants ==== - - False EQU 0 - True EQU -1 - nil EQU 0 - - b EQU BYTE PTR - w EQU WORD PTR - d EQU DWORD PTR - o EQU OFFSET - f EQU FAR PTR - s EQU SHORT - ?x4 EQU - ?x3 EQU - - -IFDEF FARSTRINGS - - EXTRN stringaddress:far - EXTRN stringlength:far - -ENDIF - - - .Data - - EVEN - -RND_Seed DW 7397, 29447, 802 -RND_Mult DW 179, 183, 182 -RND_ModV DW 32771, 32779, 32783 - -CR_LF DB 13, 10 ; the CRLF data - - .Code - -;================= -;DOS_PRINT (Text$) -;================= -; -; Prints Text Directly to DOS console w/ CR/LF -; - - PUBLIC DOS_PRINT - -DP_Stack STRUC - DW ?x4 ; DI, SI, DS, BP - DD ? ; Caller - DP_Text DW ? ; Address of Text$ Descriptor -DP_Stack ENDS - - -DOS_PRINT PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - mov BP, SP ; Set up Stack Frame - - mov SI, [BP].DP_Text ; Get Addr of Text$ descriptor - -IFDEF FARSTRINGS - push SI ; Push Addr of BC7 Decriptor Ptr - call stringaddress ; Get Address + Len of string!!! - ; DX:AX = Addr CX = Len - mov DS, DX ; DS = DX = Segment of string - mov DX, AX ; DX = AX = Offset of String -ELSE - mov CX, [SI] ; put its length into CX - mov DX, [SI+02] ; now DS:DX points to the String -ENDIF - - jcxz @No_Print ; Don't Print if empty - - mov BX, 1 ; 1= DOS Handle for Display - mov AH, 40h ; Write Text Function - int 21h ; Call DOS to do it - -@No_Print: - mov AX, SEG DGROUP ; Restore DGroup - mov DS, AX - - mov DX, o CR_LF ; Get Addr of CR/LF pair - mov CX, 2 ; 2 Characters to Write - mov BX, 1 ; 1= DOS Handle for Display - - mov AH, 40h ; Write Text Function - int 21h ; Call DOS to do it - - cld ; Reset Direction Flag - POPx DI, SI, DS, BP ; Restore Saved Registers - ret 2 ; Exit & Clean Up Stack - -DOS_PRINT ENDP - - -;================== -;DOS_PRINTS (Text$) -;================== -; -; Print Text$ Directly to DOS console -; without a trailing CR/LF -; - - PUBLIC DOS_PRINTS - -DOS_PRINTS PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - mov BP, SP ; Set up Stack Frame - - mov SI, [BP].DP_Text ; Get Addr of Text$ descriptor - -IFDEF FARSTRINGS - push SI ; Push Addr of BC7 Decriptor Ptr - call stringaddress ; Get Address + Len of string!!! - ; DX:AX = Addr CX = Len - mov DS, DX ; DS = DX = Segment of string - mov DX, AX ; DX = AX = Offset of String -ELSE - mov CX, [SI] ; put its length into CX - mov DX, [SI+02] ; now DS:DX points to the String -ENDIF - - jcxz @DPS_Exit ; Don't Print if empty - - mov BX, 1 ; 1= DOS Handle for Display - mov AH, 40h ; Write Text Function - int 21h ; Call DOS to do it - -@DPS_Exit: - cld ; Reset Direction Flag - POPx DI, SI, DS, BP ; Restore Saved Registers - ret 2 ; Exit & Clean Up Stack - -DOS_PRINTS ENDP - - -;====================== -;SET_VIDEO_MODE (Mode%) -;====================== -; -; Sets the Video Mode through the BIOS -; - - PUBLIC SET_VIDEO_MODE - -SVM_Stack STRUC - DW ?x4 ; DI, SI, DS, BP - DD ? ; Caller - SVM_Mode DB ?,? ; Desired Video Mode -SVM_Stack ENDS - - -SET_VIDEO_MODE PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - mov BP, SP ; Set up Stack Frame - - CLR AH ; Function 0 - mov AL, [BP].SVM_Mode ; Get Mode # - - int 10H ; Change Video Modes - -@SVM_Exit: - POPx DI, SI, DS, BP ; Restore Saved Registers - ret 2 ; Exit & Clean Up Stack - -SET_VIDEO_MODE ENDP - - -;============== -;SCAN_KEYBOARD% -;============== -; -; Function to scan keyboard for a pressed key -; - - PUBLIC SCAN_KEYBOARD - -SCAN_KEYBOARD PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - - mov AH, 01H ; Function #1 - int 16H ; Call Keyboard Driver - jz @SK_NO_KEY ; Exit if Zero flag set - - mov AH, 00H ; Remove Key from Buffer - int 16H ; Get Keycode in AX - - or AL, AL ; Low Byte Set (Ascii?) - jz @SK_Exit ; if not, it's a F-Key - - CLR AH ; Clear ScanCode if Ascii - jmp s @SK_Exit ; Return Key in AX - -@SK_NO_KEY: - CLR AX ; Return Nil (no Keypress) - -@SK_Exit: - cld ; Reset Direction Flag - POPx DI, SI, DS, BP ; Restore Saved Registers - ret ; Exit & Clean Up Stack - -SCAN_KEYBOARD ENDP - - -;==================== -;RANDOM_INT (MaxInt%) -;==================== -; -; Returns a pseudo-random number in the range of (0.. MaxInt-1) -; - - - PUBLIC RANDOM_INT - -RI_Stack STRUC - DW ? ; BP - DD ? ; Caller - RI_MaxVal DW ? ; Maximum Value to Return + 1 -RI_Stack ENDS - - -RANDOM_INT PROC FAR - - push BP ; Preserve Important Registers - mov BP, SP ; Set up Stack Frame - - CLR BX ; BX is the data index - CLR CX ; CX is the accumulator - -REPT 3 - mov AX, RND_Seed[BX] ; load the initial seed - mul RND_Mult[BX] ; multiply it - div RND_ModV[BX] ; and obtain the Mod value - mov RND_Seed[BX], DX ; save that for the next time - - add CX, DX ; add it into the accumulator - inc BX - inc BX ; point to the next set of values -ENDM - - mov AX, CX ; AX = Random # - CLR DX ; DX = 0 - div [BP].RI_MaxVal ; DX = DX:AX / MAxVal Remainder - - mov AX, DX - - pop BP ; Restore BP - ret 2 ; back to BASIC with AX holding the result - -RANDOM_INT ENDP - - -;=========== -;INIT_RANDOM -;=========== -; -; Scrambles the psuedo-random number sequence -; (XOR's the seed value with the timer) -; - - PUBLIC INIT_RANDOM - -INIT_RANDOM PROC FAR - - clr AX ; Segment = 0000 - mov ES, AX - mov AX, ES:[046Ch] ; Get Timer Lo Word - - xor RND_Seed, AX ; Scramble 1st Seed - - ret ; Exit & Clean Up Stack - -INIT_RANDOM ENDP - - -;==================== -;INT_SQR (X%, Round%) -;==================== -; -; Returns the Integer Square Root of (X) -; Round allows the return value to be rounded to the -; nearest integer value by passing 0x80. Passing 0 -; return the Integer Portion only. The rounding amound is -; a number from 0 to 1 multiplied by 256, thus -; 0.5 * 0x100 = 0x80! -; - -ISQ_Stack STRUC - DW ?,? ; BP, DI - DD ? ; Caller - ISQ_Round DW ? ; Amount to Round Result * 256 - ISQ_X DW ? ; "X" -ISQ_Stack ENDS - - PUBLIC INT_SQR - -INT_SQR PROC FAR - - PUSHx BP, DI ; Save BP - mov BP, SP ; Set up Stack Frame - - xor AX, AX ; {xor eax,eax} - xor DX, DX ; {xor edx,edx} - mov DI, [BP].ISQ_X ; {mov edi,x} - - mov CX, 16 ; {mov cx, 32} - -@ISQ_L: - - shl DI, 1 ; {shl edi,1} - rcl DX, 1 ; {rcl edx,1} - shl DI, 1 ; {shl edi,1} - rcl DX, 1 ; {rcl edx,1} - shl AX, 1 ; {shl eax,1} - mov BX, AX ; {mov ebx,eax} - shl BX, 1 ; {shl ebx,1} - inc BX ; {inc ebx} - cmp DX, BX ; {cmp edx,ebx} - jl @ISQ_S - - sub DX, BX ; {sub edx,ebx} - inc AX ; {inc eax} - -@ISQ_S: - loop @ISQ_L - - add ax, [BP].ISQ_Round ; {add eax,$00008000} - ; {*round* result in hi word: ie. +0.5} - shr ax, 8 ; {shr eax,16} {to ax (result)} - - POPx DI, BP ; Restore Registers - ret 4 ; Exit - -INT_SQR ENDP - - -;============ -;TIMER_COUNT& -;============ -; -; Returns the current timer value as an integer/long integer -; - - - PUBLIC TIMER_COUNT - -TIMER_COUNT PROC FAR - - clr AX ; Segment = 0000 - mov ES, AX ; use ES to get at data - mov AX, ES:[046Ch] ; Get Timer Lo Word - mov DX, ES:[046Eh] ; Get Timer Hi Word - ret ; Exit & Return value in DX:AX - -TIMER_COUNT ENDP - - - END diff --git a/16/modex105/DEMOS/BASIC7/UTILS.BI b/16/modex105/DEMOS/BASIC7/UTILS.BI deleted file mode 100755 index aeafeef4..00000000 --- a/16/modex105/DEMOS/BASIC7/UTILS.BI +++ /dev/null @@ -1,51 +0,0 @@ - - ' Misc Constants - -CONST True = -1, False = 0, nil = 0 - - ' Keyboard Codes: Extended - -CONST KyF1 = &H3B00, KyF2 = &H3C00, KyF3 = &H3D00, KyF4 = &H3E00, KyF5 = &H3F00 -CONST KyF6 = &H4000, KyF7 = &H4100, KyF8 = &H4200, KyF9 = &H4300, KyF10 = &H4400 - -CONST KyUp = &H4800, KyLeft = &H4B00, KyRight = &H4D00, KyDown = &H5000 -CONST KySLeft = &HCB00, KySRight = &HCD00, KySUp = &HC800, KySDown = &HD000 - -CONST KyHome = &H4700, KyPgUp = &H4900, KyEnd = &H4F00, KyPgDn = &H5100 -CONST KySHome = &HC700, KySPgUp = &HC900, KySEnd = &HCF00, KySPgDn = &HD100 - -CONST KyIns = &H5200, KyDel = &H5300, KyRvsTab = &H8F00 -CONST KySIns = &HC200, KySDel = &HC300 - -CONST KyAltA = &H1E00, KyAltB = &H3000, KyAltC = &H2E00, KyAltD = &H2000 -CONST KyAltE = &H1200, KyAltF = &H2100, KyAltG = &H2200, KyAltH = &H2300 -CONST KyAltI = &H1700, KyAltJ = &H2400, KyAltK = &H2500, KyAltL = &H2600 -CONST KyAltM = &H3200, KyAltN = &H3100, KyAltO = &H1800, KyAltP = &H1900 -CONST KyAltQ = &H1000, KyAltR = &H1300, KyAltS = &H1F00, KyAltT = &H1400 -CONST KyAltU = &H1600, KyAltV = &H2F00, KyAltW = &H1100, KyAltX = &H2D00 -CONST KyAltY = &H1500, KyAltZ = &H2C00 - - ' Keyboard Codes: Ascii - -CONST KyBS = 8, KyTab = 9, KyCR = 13, KyESC = &H1B, KyClr = &H7F -CONST KyPlus = 45, KyMinus = 43 - - ' Color Constants - -CONST c.BLACK = 0, c.BLUE = 1, c.GREEN = 2, c.CYAN = 3 -CONST c.RED = 4, c.PURPLE = 5, c.BROWN = 6, c.WHITE = 7 -CONST c.GREY = 8, c.bBLUE = 9, c.bGREEN = 10, c.bCYAN = 11 -CONST c.bRED = 12, c.bPURPLE = 13, c.YELLOW = 14, c.bWHITE = 15 -CONST c.BRIGHT = 8 - - ' From UTILS.ASM - -DECLARE SUB DOS.PRINT ALIAS "DOS_PRINT" (Text$) -DECLARE SUB DOS.PRINTS ALIAS "DOS_PRINTS" (Text$) -DECLARE SUB SET.VIDEO.MODE ALIAS "SET_VIDEO_MODE" (BYVAL Mode%) -DECLARE FUNCTION SCAN.KEYBOARD% ALIAS "SCAN_KEYBOARD" -DECLARE FUNCTION RANDOM.INT ALIAS "RANDOM_INT" (BYVAL MaxInt%) -DECLARE SUB INIT.RANDOM ALIAS "INIT_RANDOM" -DECLARE FUNCTION TIMER.COUNT& ALIAS "TIMER_COUNT" -DECLARE FUNCTION INT.SQR ALIAS "INT_SQR" (BYVAL X%, BYVAL Round%) - diff --git a/16/modex105/DEMOS/C/C_UTILS.ASM b/16/modex105/DEMOS/C/C_UTILS.ASM deleted file mode 100755 index 8302561a..00000000 --- a/16/modex105/DEMOS/C/C_UTILS.ASM +++ /dev/null @@ -1,405 +0,0 @@ -;======================================================= -;=== C_UTILS.ASM - Asm Utilities for C/C++ === -;======================================================= - - PAGE 255, 132 - - .MODEL Medium - .286 - - ; ==== MACROS ==== - - ; macros to PUSH and POP multiple registers - -PUSHx MACRO R1, R2, R3, R4, R5, R6, R7, R8 - IFNB - push R1 ; Save R1 - PUSHx R2, R3, R4, R5, R6, R7, R8 - ENDIF -ENDM - -POPx MACRO R1, R2, R3, R4, R5, R6, R7, R8 - IFNB - pop R1 ; Restore R1 - POPx R2, R3, R4, R5, R6, R7, R8 - ENDIF -ENDM - - ; Macro to Clear a Register to 0 - -CLR MACRO Register - xor Register, Register ; Set Register = 0 -ENDM - - ; Macros to Decrement Counter & Jump on Condition - -LOOPx MACRO Register, Destination - dec Register ; Counter-- - jnz Destination ; Jump if not 0 -ENDM - -LOOPjz MACRO Register, Destination - dec Register ; Counter-- - jz Destination ; Jump if 0 -ENDM - - - ; ==== General Constants ==== - - False EQU 0 - True EQU -1 - nil EQU 0 - - b EQU BYTE PTR - w EQU WORD PTR - d EQU DWORD PTR - o EQU OFFSET - f EQU FAR PTR - s EQU SHORT - ?x4 EQU - ?x3 EQU - - - .Data - - EVEN - -RND_Seed DW 7397, 29447, 802 -RND_Mult DW 179, 183, 182 -RND_ModV DW 32771, 32779, 32783 - -CR_LF DB 13, 10 ; the CRLF data - - .Code - -;=========================================== -;void far pascal dos_print (far char *Text) -;=========================================== -; -; - Print Text Directly to DOS console w/ CR/LF -; - - PUBLIC DOS_PRINT - -DP_Stack STRUC - DW ?x4 ; DI, SI, DS, BP - DD ? ; Caller - DP_Text DD ? ; Far Address of Text to print -DP_Stack ENDS - - -DOS_PRINT PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - mov BP, SP ; Set up Stack Frame - - lds DX, [BP].DP_Text ; Get Addr of Text$ descriptor - - ; Compute Length of string - - CLR CX ; Length = 0 - mov SI, DX ; DS:SI = String data - -@@DP_Scan_it: - - cmp b [SI], 0 ; Null Byte found? - je @@DP_Got_Len ; exit loop if so - - inc CX ; Len++ - inc SI ; Point to next char - jmp s @@DP_Scan_it ; check again... - -@@DP_Got_len: - - jcxz @No_Print ; Don't Print if empty - - mov BX, 1 ; 1= DOS Handle for Display - mov AH, 40h ; Write Text Function - int 21h ; Call DOS to do it - -@No_Print: - mov AX, SEG DGROUP ; Restore DGroup - mov DS, AX - - mov DX, o CR_LF ; Get Addr of CR/LF pair - mov CX, 2 ; 2 Characters to Write - mov BX, 1 ; 1= DOS Handle for Display - - mov AH, 40h ; Write Text Function - int 21h ; Call DOS to do it - - cld ; Reset Direction Flag - POPx DI, SI, DS, BP ; Restore Saved Registers - ret 4 ; Exit & Clean Up Stack - -DOS_PRINT ENDP - - -;=========================================== -;void far pascal dos_prints (char far *Text) -;=========================================== -; -; Print Text Directly to DOS console -; without a trailing CR/LF -; - - PUBLIC DOS_PRINTS - -DOS_PRINTS PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - mov BP, SP ; Set up Stack Frame - - lds DX, [BP].DP_Text ; Get Addr of Text$ descriptor - - ; Compute Length of string - - CLR CX ; Length = 0 - mov SI, DX ; DS:SI = String data - -@@DPS_Scan_it: - - cmp b [SI], 0 ; Null Byte found? - je @@DPS_Got_Len ; exit loop if so - - inc CX ; Len++ - inc SI ; Point to next char - jmp s @@DPS_Scan_it ; check again... - -@@DPS_Got_len: - - jcxz @DPS_Exit ; Don't Print if empty - - mov BX, 1 ; 1= DOS Handle for Display - mov AH, 40h ; Write Text Function - int 21h ; Call DOS to do it - -@DPS_Exit: - cld ; Reset Direction Flag - POPx DI, SI, DS, BP ; Restore Saved Registers - ret 2 ; Exit & Clean Up Stack - -DOS_PRINTS ENDP - - -;========================================= -;void far pascal set_video_mode (int Mode) -;========================================= -; -; Sets the Video Mode through the BIOS -; - - PUBLIC SET_VIDEO_MODE - -SVM_Stack STRUC - DW ?x4 ; DI, SI, DS, BP - DD ? ; Caller - SVM_Mode DB ?,? ; Desired Video Mode -SVM_Stack ENDS - - -SET_VIDEO_MODE PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - mov BP, SP ; Set up Stack Frame - - CLR AH ; Function 0 - mov AL, [BP].SVM_Mode ; Get Mode # - - int 10H ; Change Video Modes - -@SVM_Exit: - POPx DI, SI, DS, BP ; Restore Saved Registers - ret 2 ; Exit & Clean Up Stack - -SET_VIDEO_MODE ENDP - - -;=================================== -;int far pascal scan_keyboard (void) -;=================================== -; -; Function to scan keyboard for a pressed key -; - - PUBLIC SCAN_KEYBOARD - -SCAN_KEYBOARD PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - - mov AH, 01H ; Function #1 - INT 16H ; Call Keyboard Driver - JZ @SK_NO_KEY ; Exit if Zero flag set - - mov AH, 00H ; Remove Key from Buffer - INT 16H ; Get Keycode in AX - - OR AL, AL ; Low Byte Set (Ascii?) - JZ @SK_Exit ; if not, it's a F-Key - - CLR AH ; Clear ScanCode if Ascii - JMP s @SK_Exit ; Return Key in AX - -@SK_NO_KEY: - CLR AX ; Return Nil (no Keypress) - -@SK_Exit: - cld ; Reset Direction Flag - POPx DI, SI, DS, BP ; Restore Saved Registers - ret ; Exit & Clean Up Stack - -SCAN_KEYBOARD ENDP - - -;======================================== -;int far pascal random_int (int MaxValue) -;======================================== -; -; Returns a pseudo-random number in the range of (0.. MaxInt-1) -; - - - PUBLIC RANDOM_INT - -RI_Stack STRUC - DW ? ; BP - DD ? ; Caller - RI_MaxVal DW ? ; Maximum Value to Return + 1 -RI_Stack ENDS - - -RANDOM_INT PROC FAR - - push BP ; Preserve Important Registers - mov BP, SP ; Set up Stack Frame - - CLR BX ; BX is the data index - CLR CX ; CX is the accumulator - -REPT 3 - mov AX, RND_Seed[BX] ; load the initial seed - mul RND_Mult[BX] ; multiply it - div RND_ModV[BX] ; and obtain the Mod value - mov RND_Seed[BX], DX ; save that for the next time - - add CX, DX ; add it into the accumulator - inc BX - inc BX ; point to the next set of values -ENDM - - mov AX, CX ; AX = Random # - CLR DX ; DX = 0 - div [BP].RI_MaxVal ; DX = DX:AX / MAxVal Remainder - - mov AX, DX - - pop BP ; Restore BP - ret 2 ; back to BASIC with AX holding the result - -RANDOM_INT ENDP - - -;================================== -;void far pascal init_random (void) -;================================== -; -; Scrambles the psuedo-random number sequence -; (XOR's the seed value with the timer) -; - - PUBLIC INIT_RANDOM - -INIT_RANDOM PROC FAR - - CLR AX ; Segment = 0000 - mov ES, AX - mov AX, ES:[046Ch] ; Get Timer Lo Word - - xor RND_Seed, AX ; Scramble 1st Seed - - ret ; Exit & Clean Up Stack - -INIT_RANDOM ENDP - -;========================================= -;int far pascal int_sqr (int X, int Round) -;========================================= -; -; Returns the Integer Square Root of (X) -; Round allows the return value to be rounded to the -; nearest integer value by passing 0x80. Passing 0 -; return the Integer Portion only. The rounding amound is -; a number from 0 to 1 multiplied by 256, thus -; 0.5 * 0x100 = 0x80! -; - -ISQ_Stack STRUC - DW ?,? ; BP, DI - DD ? ; Caller - ISQ_Round DW ? ; Amount to Round Result * 256 - ISQ_X DW ? ; "X" -ISQ_Stack ENDS - - PUBLIC INT_SQR - -INT_SQR PROC FAR - - PUSHx BP, DI ; Save BP - mov BP, SP ; Set up Stack Frame - - xor AX, AX ; {xor eax,eax} - xor DX, DX ; {xor edx,edx} - mov DI, [BP].ISQ_X ; {mov edi,x} - - mov CX, 16 ; {mov cx, 32} - -@ISQ_L: - - shl DI, 1 ; {shl edi,1} - rcl DX, 1 ; {rcl edx,1} - shl DI, 1 ; {shl edi,1} - rcl DX, 1 ; {rcl edx,1} - shl AX, 1 ; {shl eax,1} - mov BX, AX ; {mov ebx,eax} - shl BX, 1 ; {shl ebx,1} - inc BX ; {inc ebx} - cmp DX, BX ; {cmp edx,ebx} - jl @ISQ_S - - sub DX, BX ; {sub edx,ebx} - inc AX ; {inc eax} - -@ISQ_S: - loop @ISQ_L - - add ax, [BP].ISQ_Round ; {add eax,$00008000} - ; {*round* result in hi word: ie. +0.5} - shr ax, 8 ; {shr eax,16} {to ax (result)} - - POPx DI, BP ; Restore Registers - ret 4 ; Exit - -INT_SQR ENDP - -;================================= -;int far pascal timer_count (void) -;================================= -; -; Returns the current timer value as an integer/long integer -; - - PUBLIC TIMER_COUNT - -TIMER_COUNT PROC FAR - - CLR AX ; Segment = 0000 - mov ES, AX - mov AX, ES:[046Ch] ; Get Timer Lo Word - mov DX, ES:[046Eh] ; Get Timer Hi Word - ret ; Exit & Clean Up Stack - -TIMER_COUNT ENDP - - - END diff --git a/16/modex105/DEMOS/C/C_UTILS.H b/16/modex105/DEMOS/C/C_UTILS.H deleted file mode 100755 index ed0e188f..00000000 --- a/16/modex105/DEMOS/C/C_UTILS.H +++ /dev/null @@ -1,117 +0,0 @@ - -#ifndef __C_UTILS_H -#define __C_UTILS_H - - - /* Misc Constants */ - -#define True -1 -#define False 0 -#define nil 0 - - /* Color Constants */ - -#define c_BLACK 0 -#define c_BLUE 1 -#define c_GREEN 2 -#define c_CYAN 3 -#define c_RED 4 -#define c_PURPLE 5 -#define c_BROWN 6 -#define c_WHITE 7 -#define c_GREY 8 -#define c_bBLUE 9 -#define c_bGREEN 10 -#define c_bCYAN 11 -#define c_bRED 12 -#define c_bPURPLE 13 -#define c_YELLOW 14 -#define c_bWHITE 15 -#define c_BRIGHT 16 - - -#define Ky_F1 0x3B00 -#define Ky_F2 0x3C00 -#define Ky_F3 0x3D00 -#define Ky_F4 0x3E00 -#define Ky_F5 0x3F00 -#define Ky_F6 0x4000 -#define Ky_F7 0x4100 -#define Ky_F8 0x4200 -#define Ky_F9 0x4300 -#define Ky_F10 0x4400 - -#define Ky_Up 0x4800 -#define Ky_Left 0x4B00 -#define Ky_Right 0x4D00 -#define Ky_Down 0x5000 -#define Ky_SUp 0xC800 -#define Ky_SLeft 0xCB00 -#define Ky_SRight 0xCD00 -#define Ky_SDown 0xD000 - -#define Ky_Home 0x4700 -#define Ky_End 0x4F00 -#define Ky_PgUp 0x4900 -#define Ky_PgDn 0x5100 -#define Ky_SHome 0xC700 -#define Ky_SEnd 0xCF00 -#define Ky_SPgUp 0xC900 -#define Ky_SPgDn 0xD100 - -#define Ky_Ins 0x5200 -#define Ky_Del 0x5300 -#define Ky_SIns 0xC200 -#define Ky_SDel 0xC300 - -#define Ky_Tab 0x0009 -#define Ky_RvsTab 0x8F00 -#define Ky_STab 0x8F00 - -#define Ky_BS 0x0008 -#define Ky_CR 0x000D -#define Ky_ESC 0x001B -#define Ky_Clr 0x007F - -#define Ky_Plus 0x002D -#define Ky_Minus 0x002B - -#define Ky_AltA 0x1E00 -#define Ky_AltB 0x3000 -#define Ky_AltC 0x2E00 -#define Ky_AltD 0x2000 -#define Ky_AltE 0x1200 -#define Ky_AltF 0x2100 -#define Ky_AltG 0x2200 -#define Ky_AltH 0x2300 -#define Ky_AltI 0x1700 -#define Ky_AltJ 0x2400 -#define Ky_AltK 0x2500 -#define Ky_AltL 0x2600 -#define Ky_AltM 0x3200 -#define Ky_AltN 0x3100 -#define Ky_AltO 0x1800 -#define Ky_AltP 0x1900 -#define Ky_AltQ 0x1000 -#define Ky_AltR 0x1300 -#define Ky_AltS 0x1F00 -#define Ky_AltT 0x1400 -#define Ky_AltU 0x1600 -#define Ky_AltV 0x2F00 -#define Ky_AltW 0x1100 -#define Ky_AltX 0x2D00 -#define Ky_AltY 0x1500 -#define Ky_AltZ 0x2C00 - - /* .ASM Functions From C_UTILS.ASM */ - -void far pascal dos_print (char far *Text); -void far pascal dos_prints (char far *Text); -void far pascal set_video_mode (int Mode); -int far pascal scan_keyboard (void); -int far pascal random_int (int MaxValue); -void far pascal init_random (void); -int far pascal int_sqr (int X, int Round); -int far pascal timer_count (void); - -#endif \ No newline at end of file diff --git a/16/modex105/DEMOS/C/C_UTILS.LST b/16/modex105/DEMOS/C/C_UTILS.LST deleted file mode 100755 index f9664ba0..00000000 --- a/16/modex105/DEMOS/C/C_UTILS.LST +++ /dev/null @@ -1,597 +0,0 @@ -Microsoft (R) Macro Assembler Version 6.11 07/03/14 12:38:18 -c_utils.asm Page 1 - 1 - - - ;======================================================= - ;=== C_UTILS.ASM - Asm Utilities for C/C++ === - ;======================================================= - - PAGE 255, 132 - - .MODEL Medium - .286 - - ; ==== MACROS ==== - - ; macros to PUSH and POP multiple registers - - PUSHx MACRO R1, R2, R3, R4, R5, R6, R7, R8 - IFNB - push R1 ; Save R1 - PUSHx R2, R3, R4, R5, R6, R7, R8 - ENDIF - ENDM - - POPx MACRO R1, R2, R3, R4, R5, R6, R7, R8 - IFNB - pop R1 ; Restore R1 - POPx R2, R3, R4, R5, R6, R7, R8 - ENDIF - ENDM - - ; Macro to Clear a Register to 0 - - CLR MACRO Register - xor Register, Register ; Set Register = 0 - ENDM - - ; Macros to Decrement Counter & Jump on Condition - - LOOPx MACRO Register, Destination - dec Register ; Counter-- - jnz Destination ; Jump if not 0 - ENDM - - LOOPjz MACRO Register, Destination - dec Register ; Counter-- - jz Destination ; Jump if 0 - ENDM - - - ; ==== General Constants ==== - - = 0000 False EQU 0 - =-0001 True EQU -1 - = 0000 nil EQU 0 - - = BYTE PTR b EQU BYTE PTR - = WORD PTR w EQU WORD PTR - = DWORD PTR d EQU DWORD PTR - = OFFSET o EQU OFFSET - = FAR PTR f EQU FAR PTR - = SHORT s EQU SHORT - = ?,?,?,? ?x4 EQU - = ?,?,? ?x3 EQU - - - 0000 .Data - - EVEN - - 0000 1CE5 7307 0322 RND_Seed DW 7397, 29447, 802 - 0006 00B3 00B7 00B6 RND_Mult DW 179, 183, 182 - 000C 8003 800B 800F RND_ModV DW 32771, 32779, 32783 - - 0012 0D 0A CR_LF DB 13, 10 ; the CRLF data - - 0000 .Code - - ;=========================================== - ;void far pascal dos_print (far char *Text) - ;=========================================== - ; - ; - Print Text Directly to DOS console w/ CR/LF - ; - - PUBLIC DOS_PRINT - - 0010 DP_Stack STRUC - 0000 0000 0000 0000 DW ?x4 ; DI, SI, DS, BP - 0000 - 0008 00000000 DD ? ; Caller - 000C 00000000 DP_Text DD ? ; Far Address of Text to print - DP_Stack ENDS - - - 0000 DOS_PRINT PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - 0000 55 1 push BP ; Save R1 - 0001 1E 2 push DS ; Save R1 - 0002 56 3 push SI ; Save R1 - 0003 57 4 push DI ; Save R1 - 0004 8B EC mov BP, SP ; Set up Stack Frame - - 0006 C5 56 0C lds DX, [BP].DP_Text ; Get Addr of Text$ descriptor - - ; Compute Length of string - - CLR CX ; Length = 0 - 0009 33 C9 1 xor CX, CX ; Set Register = 0 - 000B 8B F2 mov SI, DX ; DS:SI = String data - - 000D @@DP_Scan_it: - - 000D 80 3C 00 cmp b [SI], 0 ; Null Byte found? - 0010 74 04 je @@DP_Got_Len ; exit loop if so - - 0012 41 inc CX ; Len++ - 0013 46 inc SI ; Point to next char - 0014 EB F7 jmp s @@DP_Scan_it ; check again... - - 0016 @@DP_Got_len: - - 0016 E3 07 jcxz @No_Print ; Don't Print if empty - - 0018 BB 0001 mov BX, 1 ; 1= DOS Handle for Display - 001B B4 40 mov AH, 40h ; Write Text Function - 001D CD 21 int 21h ; Call DOS to do it - - 001F @No_Print: - 001F B8 ---- R mov AX, SEG DGROUP ; Restore DGroup - 0022 8E D8 mov DS, AX - - 0024 BA 0012 R mov DX, o CR_LF ; Get Addr of CR/LF pair - 0027 B9 0002 mov CX, 2 ; 2 Characters to Write - 002A BB 0001 mov BX, 1 ; 1= DOS Handle for Display - - 002D B4 40 mov AH, 40h ; Write Text Function - 002F CD 21 int 21h ; Call DOS to do it - - 0031 FC cld ; Reset Direction Flag - POPx DI, SI, DS, BP ; Restore Saved Registers - 0032 5F 1 pop DI ; Restore R1 - 0033 5E 2 pop SI ; Restore R1 - 0034 1F 3 pop DS ; Restore R1 - 0035 5D 4 pop BP ; Restore R1 - 0036 CA 0004 ret 4 ; Exit & Clean Up Stack - - 0039 DOS_PRINT ENDP - - - ;=========================================== - ;void far pascal dos_prints (char far *Text) - ;=========================================== - ; - ; Print Text Directly to DOS console - ; without a trailing CR/LF - ; - - PUBLIC DOS_PRINTS - - 0039 DOS_PRINTS PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - 0039 55 1 push BP ; Save R1 - 003A 1E 2 push DS ; Save R1 - 003B 56 3 push SI ; Save R1 - 003C 57 4 push DI ; Save R1 - 003D 8B EC mov BP, SP ; Set up Stack Frame - - 003F C5 56 0C lds DX, [BP].DP_Text ; Get Addr of Text$ descriptor - - ; Compute Length of string - - CLR CX ; Length = 0 - 0042 33 C9 1 xor CX, CX ; Set Register = 0 - 0044 8B F2 mov SI, DX ; DS:SI = String data - - 0046 @@DPS_Scan_it: - - 0046 80 3C 00 cmp b [SI], 0 ; Null Byte found? - 0049 74 04 je @@DPS_Got_Len ; exit loop if so - - 004B 41 inc CX ; Len++ - 004C 46 inc SI ; Point to next char - 004D EB F7 jmp s @@DPS_Scan_it ; check again... - - 004F @@DPS_Got_len: - - 004F E3 07 jcxz @DPS_Exit ; Don't Print if empty - - 0051 BB 0001 mov BX, 1 ; 1= DOS Handle for Display - 0054 B4 40 mov AH, 40h ; Write Text Function - 0056 CD 21 int 21h ; Call DOS to do it - - 0058 @DPS_Exit: - 0058 FC cld ; Reset Direction Flag - POPx DI, SI, DS, BP ; Restore Saved Registers - 0059 5F 1 pop DI ; Restore R1 - 005A 5E 2 pop SI ; Restore R1 - 005B 1F 3 pop DS ; Restore R1 - 005C 5D 4 pop BP ; Restore R1 - 005D CA 0002 ret 2 ; Exit & Clean Up Stack - - 0060 DOS_PRINTS ENDP - - - ;========================================= - ;void far pascal set_video_mode (int Mode) - ;========================================= - ; - ; Sets the Video Mode through the BIOS - ; - - PUBLIC SET_VIDEO_MODE - - 000E SVM_Stack STRUC - 0000 0000 0000 0000 DW ?x4 ; DI, SI, DS, BP - 0000 - 0008 00000000 DD ? ; Caller - 000C 00 00 SVM_Mode DB ?,? ; Desired Video Mode - SVM_Stack ENDS - - - 0060 SET_VIDEO_MODE PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - 0060 55 1 push BP ; Save R1 - 0061 1E 2 push DS ; Save R1 - 0062 56 3 push SI ; Save R1 - 0063 57 4 push DI ; Save R1 - 0064 8B EC mov BP, SP ; Set up Stack Frame - - CLR AH ; Function 0 - 0066 32 E4 1 xor AH, AH ; Set Register = 0 - 0068 8A 46 0C mov AL, [BP].SVM_Mode ; Get Mode # - - 006B CD 10 int 10H ; Change Video Modes - - 006D @SVM_Exit: - POPx DI, SI, DS, BP ; Restore Saved Registers - 006D 5F 1 pop DI ; Restore R1 - 006E 5E 2 pop SI ; Restore R1 - 006F 1F 3 pop DS ; Restore R1 - 0070 5D 4 pop BP ; Restore R1 - 0071 CA 0002 ret 2 ; Exit & Clean Up Stack - - 0074 SET_VIDEO_MODE ENDP - - - ;=================================== - ;int far pascal scan_keyboard (void) - ;=================================== - ; - ; Function to scan keyboard for a pressed key - ; - - PUBLIC SCAN_KEYBOARD - - 0074 SCAN_KEYBOARD PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - 0074 55 1 push BP ; Save R1 - Microsoft (R) Macro Assembler Version 6.11 07/03/14 12:38:18 -c_utils.asm Page 2 - 1 - - - 0075 1E 2 push DS ; Save R1 - 0076 56 3 push SI ; Save R1 - 0077 57 4 push DI ; Save R1 - - 0078 B4 01 mov AH, 01H ; Function #1 - 007A CD 16 INT 16H ; Call Keyboard Driver - 007C 74 0C JZ @SK_NO_KEY ; Exit if Zero flag set - - 007E B4 00 mov AH, 00H ; Remove Key from Buffer - 0080 CD 16 INT 16H ; Get Keycode in AX - - 0082 0A C0 OR AL, AL ; Low Byte Set (Ascii?) - 0084 74 06 JZ @SK_Exit ; if not, it's a F-Key - - CLR AH ; Clear ScanCode if Ascii - 0086 32 E4 1 xor AH, AH ; Set Register = 0 - 0088 EB 02 JMP s @SK_Exit ; Return Key in AX - - 008A @SK_NO_KEY: - CLR AX ; Return Nil (no Keypress) - 008A 33 C0 1 xor AX, AX ; Set Register = 0 - - 008C @SK_Exit: - 008C FC cld ; Reset Direction Flag - POPx DI, SI, DS, BP ; Restore Saved Registers - 008D 5F 1 pop DI ; Restore R1 - 008E 5E 2 pop SI ; Restore R1 - 008F 1F 3 pop DS ; Restore R1 - 0090 5D 4 pop BP ; Restore R1 - 0091 CB ret ; Exit & Clean Up Stack - - 0092 SCAN_KEYBOARD ENDP - - - ;======================================== - ;int far pascal random_int (int MaxValue) - ;======================================== - ; - ; Returns a pseudo-random number in the range of (0.. MaxInt-1) - ; - - - PUBLIC RANDOM_INT - - 0008 RI_Stack STRUC - 0000 0000 DW ? ; BP - 0002 00000000 DD ? ; Caller - 0006 0000 RI_MaxVal DW ? ; Maximum Value to Return + 1 - RI_Stack ENDS - - - 0092 RANDOM_INT PROC FAR - - 0092 55 push BP ; Preserve Important Registers - 0093 8B EC mov BP, SP ; Set up Stack Frame - - CLR BX ; BX is the data index - 0095 33 DB 1 xor BX, BX ; Set Register = 0 - CLR CX ; CX is the accumulator - 0097 33 C9 1 xor CX, CX ; Set Register = 0 - - REPT 3 - mov AX, RND_Seed[BX] ; load the initial seed - mul RND_Mult[BX] ; multiply it - div RND_ModV[BX] ; and obtain the Mod value - mov RND_Seed[BX], DX ; save that for the next time - - add CX, DX ; add it into the accumulator - inc BX - inc BX ; point to the next set of values - ENDM - 0099 8B 87 0000 R 1 mov AX, RND_Seed[BX] ; load the initial seed - 009D F7 A7 0006 R 1 mul RND_Mult[BX] ; multiply it - 00A1 F7 B7 000C R 1 div RND_ModV[BX] ; and obtain the Mod value - 00A5 89 97 0000 R 1 mov RND_Seed[BX], DX ; save that for the next time - 00A9 03 CA 1 add CX, DX ; add it into the accumulator - 00AB 43 1 inc BX - 00AC 43 1 inc BX ; point to the next set of values - 00AD 8B 87 0000 R 1 mov AX, RND_Seed[BX] ; load the initial seed - 00B1 F7 A7 0006 R 1 mul RND_Mult[BX] ; multiply it - 00B5 F7 B7 000C R 1 div RND_ModV[BX] ; and obtain the Mod value - 00B9 89 97 0000 R 1 mov RND_Seed[BX], DX ; save that for the next time - 00BD 03 CA 1 add CX, DX ; add it into the accumulator - 00BF 43 1 inc BX - 00C0 43 1 inc BX ; point to the next set of values - 00C1 8B 87 0000 R 1 mov AX, RND_Seed[BX] ; load the initial seed - 00C5 F7 A7 0006 R 1 mul RND_Mult[BX] ; multiply it - 00C9 F7 B7 000C R 1 div RND_ModV[BX] ; and obtain the Mod value - 00CD 89 97 0000 R 1 mov RND_Seed[BX], DX ; save that for the next time - 00D1 03 CA 1 add CX, DX ; add it into the accumulator - 00D3 43 1 inc BX - 00D4 43 1 inc BX ; point to the next set of values - - 00D5 8B C1 mov AX, CX ; AX = Random # - CLR DX ; DX = 0 - 00D7 33 D2 1 xor DX, DX ; Set Register = 0 - 00D9 F7 76 06 div [BP].RI_MaxVal ; DX = DX:AX / MAxVal Remainder - - 00DC 8B C2 mov AX, DX - - 00DE 5D pop BP ; Restore BP - 00DF CA 0002 ret 2 ; back to BASIC with AX holding the result - - 00E2 RANDOM_INT ENDP - - - ;================================== - ;void far pascal init_random (void) - ;================================== - ; - ; Scrambles the psuedo-random number sequence - ; (XOR's the seed value with the timer) - ; - - PUBLIC INIT_RANDOM - - 00E2 INIT_RANDOM PROC FAR - - CLR AX ; Segment = 0000 - 00E2 33 C0 1 xor AX, AX ; Set Register = 0 - 00E4 8E C0 mov ES, AX - 00E6 26: A1 046C mov AX, ES:[046Ch] ; Get Timer Lo Word - - 00EA 31 06 0000 R xor RND_Seed, AX ; Scramble 1st Seed - - 00EE CB ret ; Exit & Clean Up Stack - - 00EF INIT_RANDOM ENDP - - ;========================================= - ;int far pascal int_sqr (int X, int Round) - ;========================================= - ; - ; Returns the Integer Square Root of (X) - ; Round allows the return value to be rounded to the - ; nearest integer value by passing 0x80. Passing 0 - ; return the Integer Portion only. The rounding amound is - ; a number from 0 to 1 multiplied by 256, thus - ; 0.5 * 0x100 = 0x80! - ; - - 000C ISQ_Stack STRUC - 0000 0000 0000 DW ?,? ; BP, DI - 0004 00000000 DD ? ; Caller - 0008 0000 ISQ_Round DW ? ; Amount to Round Result * 256 - 000A 0000 ISQ_X DW ? ; "X" - ISQ_Stack ENDS - - PUBLIC INT_SQR - - 00EF INT_SQR PROC FAR - - PUSHx BP, DI ; Save BP - 00EF 55 1 push BP ; Save R1 - 00F0 57 2 push DI ; Save R1 - 00F1 8B EC mov BP, SP ; Set up Stack Frame - - 00F3 33 C0 xor AX, AX ; {xor eax,eax} - 00F5 33 D2 xor DX, DX ; {xor edx,edx} - 00F7 8B 7E 0A mov DI, [BP].ISQ_X ; {mov edi,x} - - 00FA B9 0010 mov CX, 16 ; {mov cx, 32} - - 00FD @ISQ_L: - - 00FD D1 E7 shl DI, 1 ; {shl edi,1} - 00FF D1 D2 rcl DX, 1 ; {rcl edx,1} - 0101 D1 E7 shl DI, 1 ; {shl edi,1} - 0103 D1 D2 rcl DX, 1 ; {rcl edx,1} - 0105 D1 E0 shl AX, 1 ; {shl eax,1} - 0107 8B D8 mov BX, AX ; {mov ebx,eax} - 0109 D1 E3 shl BX, 1 ; {shl ebx,1} - 010B 43 inc BX ; {inc ebx} - 010C 3B D3 cmp DX, BX ; {cmp edx,ebx} - 010E 7C 03 jl @ISQ_S - - 0110 2B D3 sub DX, BX ; {sub edx,ebx} - 0112 40 inc AX ; {inc eax} - - 0113 @ISQ_S: - 0113 E2 E8 loop @ISQ_L - - 0115 03 46 08 add ax, [BP].ISQ_Round ; {add eax,$00008000} - ; {*round* result in hi word: ie. +0 - .5} - 0118 C1 E8 08 shr ax, 8 ; {shr eax,16} {to ax (result)} - - POPx DI, BP ; Restore Registers - 011B 5F 1 pop DI ; Restore R1 - 011C 5D 2 pop BP ; Restore R1 - 011D CA 0004 ret 4 ; Exit - - 0120 INT_SQR ENDP - - ;================================= - ;int far pascal timer_count (void) - ;================================= - ; - ; Returns the current timer value as an integer/long integer - ; - - PUBLIC TIMER_COUNT - - 0120 TIMER_COUNT PROC FAR - - CLR AX ; Segment = 0000 - 0120 33 C0 1 xor AX, AX ; Set Register = 0 - 0122 8E C0 mov ES, AX - 0124 26: A1 046C mov AX, ES:[046Ch] ; Get Timer Lo Word - 0128 26: 8B 16 046E mov DX, ES:[046Eh] ; Get Timer Hi Word - 012D CB ret ; Exit & Clean Up Stack - - 012E TIMER_COUNT ENDP - - - END - Microsoft (R) Macro Assembler Version 6.11 07/03/14 12:38:18 -c_utils.asm Symbols 3 - 1 - - - - -Macros: - - N a m e Type - -CLR . . . . . . . . . . . . . . Proc -LOOPjz . . . . . . . . . . . . . Proc -LOOPx . . . . . . . . . . . . . Proc -POPx . . . . . . . . . . . . . . Proc -PUSHx . . . . . . . . . . . . . Proc - Microsoft (R) Macro Assembler Version 6.11 07/03/14 12:38:18 -c_utils.asm Symbols 4 - 1 - - - - -Structures and Unions: - - N a m e Size - Offset Type - -DP_Stack . . . . . . . . . . . . 0010 - DP_Text . . . . . . . . . . . 000C DWord -ISQ_Stack . . . . . . . . . . . 000C - ISQ_Round . . . . . . . . . . 0008 Word - ISQ_X . . . . . . . . . . . . 000A Word -RI_Stack . . . . . . . . . . . . 0008 - RI_MaxVal . . . . . . . . . . 0006 Word -SVM_Stack . . . . . . . . . . . 000E - SVM_Mode . . . . . . . . . . . 000C Byte - Microsoft (R) Macro Assembler Version 6.11 07/03/14 12:38:18 -c_utils.asm Symbols 5 - 1 - - - - -Segments and Groups: - - N a m e Size Length Align Combine Class - -C_UTILS_TEXT . . . . . . . . . . 16 Bit 012E Word Public 'CODE' -DGROUP . . . . . . . . . . . . . GROUP -_DATA . . . . . . . . . . . . . 16 Bit 0014 Word Public 'DATA' - Microsoft (R) Macro Assembler Version 6.11 07/03/14 12:38:18 -c_utils.asm Symbols 6 - 1 - - - - -Procedures, parameters and locals: - - N a m e Type Value Attr - -DOS_PRINTS . . . . . . . . . . . P Far 0039 C_UTILS_TEXT Length= 0027 Public -DOS_PRINT . . . . . . . . . . . P Far 0000 C_UTILS_TEXT Length= 0039 Public -INIT_RANDOM . . . . . . . . . . P Far 00E2 C_UTILS_TEXT Length= 000D Public -INT_SQR . . . . . . . . . . . . P Far 00EF C_UTILS_TEXT Length= 0031 Public -RANDOM_INT . . . . . . . . . . . P Far 0092 C_UTILS_TEXT Length= 0050 Public -SCAN_KEYBOARD . . . . . . . . . P Far 0074 C_UTILS_TEXT Length= 001E Public -SET_VIDEO_MODE . . . . . . . . . P Far 0060 C_UTILS_TEXT Length= 0014 Public -TIMER_COUNT . . . . . . . . . . P Far 0120 C_UTILS_TEXT Length= 000E Public - Microsoft (R) Macro Assembler Version 6.11 07/03/14 12:38:18 -c_utils.asm Symbols 7 - 1 - - - - -Symbols: - - N a m e Type Value Attr - -?x3 . . . . . . . . . . . . . . Text ?,?,? -?x4 . . . . . . . . . . . . . . Text ?,?,?,? -@@DPS_Got_len . . . . . . . . . L Near 004F C_UTILS_TEXT -@@DPS_Scan_it . . . . . . . . . L Near 0046 C_UTILS_TEXT -@@DP_Got_len . . . . . . . . . . L Near 0016 C_UTILS_TEXT -@@DP_Scan_it . . . . . . . . . . L Near 000D C_UTILS_TEXT -@CodeSize . . . . . . . . . . . Number 0001h -@DPS_Exit . . . . . . . . . . . L Near 0058 C_UTILS_TEXT -@DataSize . . . . . . . . . . . Number 0000h -@ISQ_L . . . . . . . . . . . . . L Near 00FD C_UTILS_TEXT -@ISQ_S . . . . . . . . . . . . . L Near 0113 C_UTILS_TEXT -@Interface . . . . . . . . . . . Number 0000h -@Model . . . . . . . . . . . . . Number 0004h -@No_Print . . . . . . . . . . . L Near 001F C_UTILS_TEXT -@SK_Exit . . . . . . . . . . . . L Near 008C C_UTILS_TEXT -@SK_NO_KEY . . . . . . . . . . . L Near 008A C_UTILS_TEXT -@SVM_Exit . . . . . . . . . . . L Near 006D C_UTILS_TEXT -@code . . . . . . . . . . . . . Text C_UTILS_TEXT -@data . . . . . . . . . . . . . Text DGROUP -@fardata? . . . . . . . . . . . Text FAR_BSS -@fardata . . . . . . . . . . . . Text FAR_DATA -@stack . . . . . . . . . . . . . Text DGROUP -CR_LF . . . . . . . . . . . . . Byte 0012 _DATA -False . . . . . . . . . . . . . Number 0000h -RND_ModV . . . . . . . . . . . . Word 000C _DATA -RND_Mult . . . . . . . . . . . . Word 0006 _DATA -RND_Seed . . . . . . . . . . . . Word 0000 _DATA -True . . . . . . . . . . . . . . Number -0001h -b . . . . . . . . . . . . . . . Text BYTE PTR -d . . . . . . . . . . . . . . . Text DWORD PTR -f . . . . . . . . . . . . . . . Text FAR PTR -nil . . . . . . . . . . . . . . Number 0000h -o . . . . . . . . . . . . . . . Text OFFSET -s . . . . . . . . . . . . . . . Text SHORT -w . . . . . . . . . . . . . . . Text WORD PTR - - 0 Warnings - 0 Errors diff --git a/16/modex105/DEMOS/C/C_UTILS.SBR b/16/modex105/DEMOS/C/C_UTILS.SBR deleted file mode 100755 index 0301171bdd90f778ed3f244b37130f9388df7f0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1731 zcmZ8hU1(fY5dQAuK&p#UAC#&fKJ+1i$i~{%wn9$2yN#Fb?%mvb6JlMtU9-E%CfnU~ zf101hwzk#OG>vU+Qxyc!2N9n{@L3cD5qwebS;PmQL{UWW!I`<6G!~ZSyEEr}b7tn7 zf#VpY4i`@p2M@?E>mDuUymV$_FuA{&&g8tHn1VAIbvw0s`>9g<6zE0t(XKMmUJw<0 zHy?s-iluVL5`exDQx!objKacF3Q)yL8lNHdY z(+7JBZZH}JozmniXxuTJN{Wv@-hiJ^M?s}hMq&mu*DsS$~{0n-MBnhI>?z>CnI#*j%$*se|?lw^L;Am0jr`8vA;!PtUtas20*?Hi0*+i(!2Hh%{}P54 z_G#P|n2N?_722Je1Nq{j!*c#C+FFi3V9shrA1PormzFJYr&ErZQ7#snRblNA+d*;C z6T-HvU7lI$73~$+6c;V1EivB_IdG1j_Y7zZ<{aoN{XZ!7^WX&1Qo0MOv0S&_QE5Hw zm^9=@G|V+G0ZTGHjWd zH094>s_NnCv^9gq`OFt0J}$u|(Chr?lQ$-gku%FnC7^3dP43Vsqdz2BReRUM4r z&SY>OS3z^Vxw#t8%}BEo)hj%!GcZ>rq*MyiYe!nkJm^fWUJyos>YWht>1?8)m$MPs3x4WckJ5rSNp>pVkJ&l@Pnu910PcFYZ} z=06a?@BBdlx8ySgOm|rU=eI`yb$hznh;_vxm~+eqXi%#~18?D2sosvCf#gltN!GXq zJMWlTO@sHZ<$b%oe<#F2_sDL&1>fD0z, ; If DX not setup - MOV DX, Register ; then Select Register - ENDIF - IFDIFI , ; If AX not setup - MOV AX, Value ; then Get Data Value - ENDIF - OUT DX, AX ; Set I/O Register(s) -ENDM - - ; Macro to OUT a 8 bit value to an I/O Port - -OUT_8 MACRO Register, Value - IFDIFI , ; If DX not setup - MOV DX, Register ; then Select Register - ENDIF - IFDIFI , ; If AL not Setup - MOV AL, Value ; then Get Data Value - ENDIF - OUT DX, AL ; Set I/O Register -ENDM - - ; macros to PUSH and POP multiple registers - -PUSHx MACRO R1, R2, R3, R4, R5, R6, R7, R8 - IFNB - PUSH R1 ; Save R1 - PUSHx R2, R3, R4, R5, R6, R7, R8 - ENDIF -ENDM - -POPx MACRO R1, R2, R3, R4, R5, R6, R7, R8 - IFNB - POP R1 ; Restore R1 - POPx R2, R3, R4, R5, R6, R7, R8 - ENDIF -ENDM - - ; Macro to Clear Registers to 0 - -CLR MACRO Register, R2, R3, R4, R5, R6 - IFNB - XOR Register, Register ; Set Register = 0 - CLR R2, R3, R4, R5, R6 - ENDIF -ENDM - - ; Macros to Decrement Counter & Jump on Condition - -LOOPx MACRO Register, Destination - DEC Register ; Counter-- - JNZ Destination ; Jump if not 0 -ENDM - -LOOPjz MACRO Register, Destination - DEC Register ; Counter-- - JZ Destination ; Jump if 0 -ENDM - - - ; ===== General Constants ===== - - False EQU 0 - True EQU -1 - nil EQU 0 - - b EQU BYTE PTR - w EQU WORD PTR - d EQU DWORD PTR - o EQU OFFSET - f EQU FAR PTR - s EQU SHORT - ?x4 EQU - ?x3 EQU - - ; ===== VGA Register Values ===== - - VGA_Segment EQU 0A000h ; Vga Memory Segment - - ATTRIB_Ctrl EQU 03C0h ; VGA Attribute Controller - GC_Index EQU 03CEh ; VGA Graphics Controller - SC_Index EQU 03C4h ; VGA Sequencer Controller - SC_Data EQU 03C5h ; VGA Sequencer Data Port - CRTC_Index EQU 03D4h ; VGA CRT Controller - CRTC_Data EQU 03D5h ; VGA CRT Controller Data - MISC_OUTPUT EQU 03C2h ; VGA Misc Register - INPUT_1 EQU 03DAh ; Input Status #1 Register - - DAC_WRITE_ADDR EQU 03C8h ; VGA DAC Write Addr Register - DAC_READ_ADDR EQU 03C7h ; VGA DAC Read Addr Register - PEL_DATA_REG EQU 03C9h ; VGA DAC/PEL data Register R/W - - PIXEL_PAN_REG EQU 033h ; Attrib Index: Pixel Pan Reg - MAP_MASK EQU 002h ; Sequ Index: Write Map Mask reg - READ_MAP EQU 004h ; GC Index: Read Map Register - START_DISP_HI EQU 00Ch ; CRTC Index: Display Start Hi - START_DISP_LO EQU 00Dh ; CRTC Index: Display Start Lo - - MAP_MASK_PLANE1 EQU 00102h ; Map Register + Plane 1 - MAP_MASK_PLANE2 EQU 01102h ; Map Register + Plane 1 - ALL_PLANES_ON EQU 00F02h ; Map Register + All Bit Planes - - CHAIN4_OFF EQU 00604h ; Chain 4 mode Off - ASYNC_RESET EQU 00100h ; (A)synchronous Reset - SEQU_RESTART EQU 00300h ; Sequencer Restart - - LATCHES_ON EQU 00008h ; Bit Mask + Data from Latches - LATCHES_OFF EQU 0FF08h ; Bit Mask + Data from CPU - - VERT_RETRACE EQU 08h ; INPUT_1: Vertical Retrace Bit - PLANE_BITS EQU 03h ; Bits 0-1 of Xpos = Plane # - ALL_PLANES EQU 0Fh ; All Bit Planes Selected - CHAR_BITS EQU 0Fh ; Bits 0-3 of Character Data - - GET_CHAR_PTR EQU 01130h ; VGA BIOS Func: Get Char Set - ROM_8x8_Lo EQU 03h ; ROM 8x8 Char Set Lo Pointer - ROM_8x8_Hi EQU 04h ; ROM 8x8 Char Set Hi Pointer - - ; Constants Specific for these routines - - NUM_MODES EQU 8 ; # of Mode X Variations - - ; Specific Mode Data Table format... - -Mode_Data_Table STRUC - M_MiscR DB ? ; Value of MISC_OUTPUT register - M_Pages DB ? ; Maximum Possible # of pages - M_XSize DW ? ; X Size Displayed on screen - M_YSize DW ? ; Y Size Displayed on screen - M_XMax DW ? ; Maximum Possible X Size - M_YMax DW ? ; Maximum Possible Y Size - M_CRTC DW ? ; Table of CRTC register values -Mode_Data_Table ENDS - - ; ===== DGROUP STORAGE NEEDED (42 BYTES) ===== - - .DATA? - -SCREEN_WIDTH DW 0 ; Width of a line in Bytes -SCREEN_HEIGHT DW 0 ; Vertical Height in Pixels - -LAST_PAGE DW 0 ; # of Display Pages -PAGE_ADDR DW 4 DUP (0) ; Offsets to start of each page - -PAGE_SIZE DW 0 ; Size of Page in Addr Bytes - -DISPLAY_PAGE DW 0 ; Page # currently displayed -ACTIVE_PAGE DW 0 ; Page # currently active - -CURRENT_PAGE DW 0 ; Offset of current Page -CURRENT_SEGMENT DW 0 ; Segment of VGA memory - -CURRENT_XOFFSET DW 0 ; Current Display X Offset -CURRENT_YOFFSET DW 0 ; Current Display Y Offset - -CURRENT_MOFFSET DW 0 ; Current Start Offset - -MAX_XOFFSET DW 0 ; Current Display X Offset -MAX_YOFFSET DW 0 ; Current Display Y Offset - -CHARSET_LOW DW 0, 0 ; Far Ptr to Char Set: 0-127 -CHARSET_HI DW 0, 0 ; Far Ptr to Char Set: 128-255 - - .CODE - - ; ===== DATA TABLES ===== - - ; Data Tables, Put in Code Segment for Easy Access - ; (Like when all the other Segment Registers are in - ; use!!) and reduced DGROUP requirements... - - ; Bit Mask Tables for Left/Right/Character Masks - -Left_Clip_Mask DB 0FH, 0EH, 0CH, 08H - -Right_Clip_Mask DB 01H, 03H, 07H, 0FH - - ; Bit Patterns for converting character fonts - -Char_Plane_Data DB 00H,08H,04H,0CH,02H,0AH,06H,0EH - DB 01H,09H,05H,0DH,03H,0BH,07H,0FH - - ; CRTC Register Values for Various Configurations - -MODE_Single_Line: ; CRTC Setup Data for 400/480 Line modes - DW 04009H ; Cell Height (1 Scan Line) - DW 00014H ; Dword Mode off - DW 0E317H ; turn on Byte Mode - DW nil ; End of CRTC Data for 400/480 Line Mode - -MODE_Double_Line: ; CRTC Setup Data for 200/240 Line modes - DW 04109H ; Cell Height (2 Scan Lines) - DW 00014H ; Dword Mode off - DW 0E317H ; turn on Byte Mode - DW nil ; End of CRTC Data for 200/240 Line Mode - -MODE_320_Wide: ; CRTC Setup Data for 320 Horz Pixels - DW 05F00H ; Horz total - DW 04F01H ; Horz Displayed - DW 05002H ; Start Horz Blanking - DW 08203H ; End Horz Blanking - DW 05404H ; Start H Sync - DW 08005H ; End H Sync - DW nil ; End of CRTC Data for 320 Horz pixels - -MODE_360_Wide: ; CRTC Setup Data for 360 Horz Pixels - DW 06B00H ; Horz total - DW 05901H ; Horz Displayed - DW 05A02H ; Start Horz Blanking - DW 08E03H ; End Horz Blanking - DW 05E04H ; Start H Sync - DW 08A05H ; End H Sync - DW nil ; End of CRTC Data for 360 Horz pixels - -MODE_200_Tall: -MODE_400_Tall: ; CRTC Setup Data for 200/400 Line modes - DW 0BF06H ; Vertical Total - DW 01F07H ; Overflow - DW 09C10H ; V Sync Start - DW 08E11H ; V Sync End/Prot Cr0 Cr7 - DW 08F12H ; Vertical Displayed - DW 09615H ; V Blank Start - DW 0B916H ; V Blank End - DW nil ; End of CRTC Data for 200/400 Lines - -MODE_240_Tall: -MODE_480_Tall: ; CRTC Setup Data for 240/480 Line modes - DW 00D06H ; Vertical Total - DW 03E07H ; Overflow - DW 0EA10H ; V Sync Start - DW 08C11H ; V Sync End/Prot Cr0 Cr7 - DW 0DF12H ; Vertical Displayed - DW 0E715H ; V Blank Start - DW 00616H ; V Blank End - DW nil ; End of CRTC Data for 240/480 Lines - - ; Table of Display Mode Tables - -MODE_TABLE: - DW o MODE_320x200, o MODE_320x400 - DW o MODE_360x200, o MODE_360x400 - DW o MODE_320x240, o MODE_320x480 - DW o MODE_360x240, o MODE_360x480 - - ; Table of Display Mode Components - -MODE_320x200: ; Data for 320 by 200 Pixels - - DB 063h ; 400 scan Lines & 25 Mhz Clock - DB 4 ; Maximum of 4 Pages - DW 320, 200 ; Displayed Pixels (X,Y) - DW 1302, 816 ; Max Possible X and Y Sizes - - DW o MODE_320_Wide, o MODE_200_Tall - DW o MODE_Double_Line, nil - -MODE_320x400: ; Data for 320 by 400 Pixels - - DB 063h ; 400 scan Lines & 25 Mhz Clock - DB 2 ; Maximum of 2 Pages - DW 320, 400 ; Displayed Pixels X,Y - DW 648, 816 ; Max Possible X and Y Sizes - - DW o MODE_320_Wide, o MODE_400_Tall - DW o MODE_Single_Line, nil - -MODE_360x240: ; Data for 360 by 240 Pixels - - DB 0E7h ; 480 scan Lines & 28 Mhz Clock - DB 3 ; Maximum of 3 Pages - DW 360, 240 ; Displayed Pixels X,Y - DW 1092, 728 ; Max Possible X and Y Sizes - - DW o MODE_360_Wide, o MODE_240_Tall - DW o MODE_Double_Line , nil - -MODE_360x480: ; Data for 360 by 480 Pixels - - DB 0E7h ; 480 scan Lines & 28 Mhz Clock - DB 1 ; Only 1 Page Possible - DW 360, 480 ; Displayed Pixels X,Y - DW 544, 728 ; Max Possible X and Y Sizes - - DW o MODE_360_Wide, o MODE_480_Tall - DW o MODE_Single_Line , nil - -MODE_320x240: ; Data for 320 by 240 Pixels - - DB 0E3h ; 480 scan Lines & 25 Mhz Clock - DB 3 ; Maximum of 3 Pages - DW 320, 240 ; Displayed Pixels X,Y - DW 1088, 818 ; Max Possible X and Y Sizes - - DW o MODE_320_Wide, o MODE_240_Tall - DW o MODE_Double_Line, nil - -MODE_320x480: ; Data for 320 by 480 Pixels - - DB 0E3h ; 480 scan Lines & 25 Mhz Clock - DB 1 ; Only 1 Page Possible - DW 320, 480 ; Displayed Pixels X,Y - DW 540, 818 ; Max Possible X and Y Sizes - - DW o MODE_320_WIDE, o MODE_480_Tall - DW o MODE_Single_Line, nil - -MODE_360x200: ; Data for 360 by 200 Pixels - - DB 067h ; 400 scan Lines & 28 Mhz Clock - DB 3 ; Maximum of 3 Pages - DW 360, 200 ; Displayed Pixels (X,Y) - DW 1302, 728 ; Max Possible X and Y Sizes - - DW o MODE_360_Wide, MODE_200_Tall - DW o MODE_Double_Line, nil - -MODE_360x400: ; Data for 360 by 400 Pixels - - DB 067h ; 400 scan Lines & 28 Mhz Clock - DB 1 ; Maximum of 1 Pages - DW 360, 400 ; Displayed Pixels X,Y - DW 648, 816 ; Max Possible X and Y Sizes - - DW o MODE_360_Wide, MODE_400_Tall - DW o MODE_Single_Line, nil - - - ; ===== MODE X SETUP ROUTINES ===== - -;====================================================== -;SET_VGA_MODEX% (ModeType%, MaxXPos%, MaxYpos%, Pages%) -;====================================================== -; -; Sets Up the specified version of Mode X. Allows for -; the setup of multiple video pages, and a virtual -; screen which can be larger than the displayed screen -; (which can then be scrolled a pixel at a time) -; -; ENTRY: ModeType = Desired Screen Resolution (0-7) -; -; 0 = 320 x 200, 4 Pages max, 1.2:1 Aspect Ratio -; 1 = 320 x 400, 2 Pages max, 2.4:1 Aspect Ratio -; 2 = 360 x 200, 3 Pages max, 1.35:1 Aspect Ratio -; 3 = 360 x 400, 1 Page max, 2.7:1 Aspect Ratio -; 4 = 320 x 240, 3 Pages max, 1:1 Aspect Ratio -; 5 = 320 x 480, 1 Page max, 2:1 Aspect Ratio -; 6 = 360 x 240, 3 Pages max, 1.125:1 Aspect Ratio -; 7 = 360 x 480, 1 Page max, 2.25:1 Aspect Ratio -; -; MaxXpos = The Desired Virtual Screen Width -; MaxYpos = The Desired Virtual Screen Height -; Pages = The Desired # of Video Pages -; -; EXIT: AX = Success Flag: 0 = Failure / -1= Success -; - -SVM_STACK STRUC - SVM_Table DW ? ; Offset of Mode Info Table - DW ?x4 ; DI, SI, DS, BP - DD ? ; Caller - SVM_Pages DW ? ; # of Screen Pages desired - SVM_Ysize DW ? ; Vertical Screen Size Desired - SVM_Xsize DW ? ; Horizontal Screen Size Desired - SVM_Mode DW ? ; Display Resolution Desired -SVM_STACK ENDS - - PUBLIC SET_VGA_MODEX - -SET_VGA_MODEX PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - SUB SP, 2 ; Allocate workspace - MOV BP, SP ; Set up Stack Frame - - ; Check Legality of Mode Request.... - - MOV BX, [BP].SVM_Mode ; Get Requested Mode # - CMP BX, NUM_MODES ; Is it 0..7? - JAE @SVM_BadModeSetup ; If Not, Error out - - SHL BX, 1 ; Scale BX - MOV SI, w MODE_TABLE[BX] ; CS:SI -> Mode Info - MOV [BP].SVM_Table, SI ; Save ptr for later use - - ; Check # of Requested Display Pages - - MOV CX, [BP].SVM_Pages ; Get # of Requested Pages - CLR CH ; Set Hi Word = 0! - CMP CL, CS:[SI].M_Pages ; Check # Pages for mode - JA @SVM_BadModeSetup ; Report Error if too Many Pages - JCXZ @SVM_BadModeSetup ; Report Error if 0 Pages - - ; Check Validity of X Size - - AND [BP].SVM_XSize, 0FFF8h ; X size Mod 8 Must = 0 - - MOV AX, [BP].SVM_XSize ; Get Logical Screen Width - CMP AX, CS:[SI].M_XSize ; Check against Displayed X - JB @SVM_BadModeSetup ; Report Error if too small - CMP AX, CS:[SI].M_XMax ; Check against Max X - JA @SVM_BadModeSetup ; Report Error if too big - - ; Check Validity of Y Size - - MOV BX, [BP].SVM_YSize ; Get Logical Screen Height - CMP BX, CS:[SI].M_YSize ; Check against Displayed Y - JB @SVM_BadModeSetup ; Report Error if too small - CMP BX, CS:[SI].M_YMax ; Check against Max Y - JA @SVM_BadModeSetup ; Report Error if too big - - ; Enough memory to Fit it all? - - SHR AX, 2 ; # of Bytes:Line = XSize/4 - MUL CX ; AX = Bytes/Line * Pages - MUL BX ; DX:AX = Total VGA mem needed - JNO @SVM_Continue ; Exit if Total Size > 256K - - DEC DX ; Was it Exactly 256K??? - OR DX, AX ; (DX = 1, AX = 0000) - JZ @SVM_Continue ; if so, it's valid... - -@SVM_BadModeSetup: - - CLR AX ; Return Value = False - JMP @SVM_Exit ; Normal Exit - -@SVM_Continue: - - MOV AX, 13H ; Start with Mode 13H - INT 10H ; Let BIOS Set Mode - - OUT_16 SC_INDEX, CHAIN4_OFF ; Disable Chain 4 Mode - OUT_16 SC_INDEX, ASYNC_RESET ; (A)synchronous Reset - OUT_8 MISC_OUTPUT, CS:[SI].M_MiscR ; Set New Timing/Size - OUT_16 SC_INDEX, SEQU_RESTART ; Restart Sequencer ... - - OUT_8 CRTC_INDEX, 11H ; Select Vert Retrace End Register - INC DX ; Point to Data - IN AL, DX ; Get Value, Bit 7 = Protect - AND AL, 7FH ; Mask out Write Protect - OUT DX, AL ; And send it back - - MOV DX, CRTC_INDEX ; Vga Crtc Registers - ADD SI, M_CRTC ; SI -> CRTC Parameter Data - - ; Load Tables of CRTC Parameters from List of Tables - -@SVM_Setup_Table: - - MOV DI, CS:[SI] ; Get Pointer to CRTC Data Tbl - ADD SI, 2 ; Point to next Ptr Entry - OR DI, DI ; A nil Ptr means that we have - JZ @SVM_Set_Data ; finished CRTC programming - -@SVM_Setup_CRTC: - MOV AX, CS:[DI] ; Get CRTC Data from Table - ADD DI, 2 ; Advance Pointer - OR AX, AX ; At End of Data Table? - JZ @SVM_Setup_Table ; If so, Exit & get next Table - - OUT DX, AX ; Reprogram VGA CRTC reg - JMP s @SVM_Setup_CRTC ; Process Next Table Entry - - ; Initialize Page & Scroll info, DI = 0 - -@SVM_Set_Data: - MOV DISPLAY_PAGE, DI ; Display Page = 0 - MOV ACTIVE_PAGE, DI ; Active Page = 0 - MOV CURRENT_PAGE, DI ; Current Page (Offset) = 0 - MOV CURRENT_XOFFSET, DI ; Horz Scroll Index = 0 - MOV CURRENT_YOFFSET, DI ; Vert Scroll Index = 0 - MOV CURRENT_MOFFSET, DI ; Memory Scroll Index = 0 - - MOV AX, VGA_SEGMENT ; Segment for VGA memory - MOV CURRENT_SEGMENT, AX ; Save for Future LES's - - ; Set Logical Screen Width, X Scroll and Our Data - - MOV SI, [BP].SVM_Table ; Get Saved Ptr to Mode Info - MOV AX, [BP].SVM_Xsize ; Get Display Width - - MOV CX, AX ; CX = Logical Width - SUB CX, CS:[SI].M_XSize ; CX = Max X Scroll Value - MOV MAX_XOFFSET, CX ; Set Maximum X Scroll - - SHR AX, 2 ; Bytes = Pixels / 4 - MOV SCREEN_WIDTH, AX ; Save Width in Pixels - - SHR AX, 1 ; Offset Value = Bytes / 2 - MOV AH, 13h ; CRTC Offset Register Index - XCHG AL, AH ; Switch format for OUT - OUT DX, AX ; Set VGA CRTC Offset Reg - - ; Setup Data table, Y Scroll, Misc for Other Routines - - MOV AX, [BP].SVM_Ysize ; Get Logical Screen Height - - MOV CX, AX ; CX = Logical Height - SUB BX, CS:[SI].M_YSize ; CX = Max Y Scroll Value - MOV MAX_YOFFSET, CX ; Set Maximum Y Scroll - - MOV SCREEN_HEIGHT, AX ; Save Height in Pixels - MUL SCREEN_WIDTH ; AX = Page Size in Bytes, - MOV PAGE_SIZE, AX ; Save Page Size - - MOV CX, [BP].SVM_Pages ; Get # of Pages - MOV LAST_PAGE, CX ; Save # of Pages - - CLR BX ; Page # = 0 - MOV DX, BX ; Page 0 Offset = 0 - -@SVM_Set_Pages: - - MOV PAGE_ADDR[BX], DX ; Set Page #(BX) Offset - ADD BX, 2 ; Page#++ - ADD DX, AX ; Compute Addr of Next Page - LOOPx CX, @SVM_Set_Pages ; Loop until all Pages Set - - ; Clear VGA Memory - - OUT_16 SC_INDEX, ALL_PLANES_ON ; Select All Planes - LES DI, d CURRENT_PAGE ; -> Start of VGA memory - - CLR AX ; AX = 0 - CLD ; Block Xfer Forwards - MOV CX, 8000H ; 32K * 4 * 2 = 256K - REP STOSW ; Clear dat memory! - - ; Setup Font Pointers - - MOV BH, ROM_8x8_Lo ; Ask for 8x8 Font, 0-127 - MOV AX, GET_CHAR_PTR ; Service to Get Pointer - INT 10h ; Call VGA BIOS - - MOV CHARSET_LOW, BP ; Save Char Set Offset - MOV CHARSET_LOW+2, ES ; Save Char Set Segment - - MOV BH, ROM_8x8_Hi ; Ask for 8x8 Font, 128-255 - MOV AX, GET_CHAR_PTR ; Service to Get Pointer - INT 10h ; Call VGA BIOS - - MOV CHARSET_HI, BP ; Save Char Set Offset - MOV CHARSET_HI+2, ES ; Save Char Set Segment - - MOV AX, True ; Return Success Code - -@SVM_EXIT: - ADD SP, 2 ; Deallocate workspace - POPx DI, SI, DS, BP ; Restore Saved Registers - RET 8 ; Exit & Clean Up Stack - -SET_VGA_MODEX ENDP - - -;================== -;SET_MODEX% (Mode%) -;================== -; -; Quickie Mode Set - Sets Up Mode X to Default Configuration -; -; ENTRY: ModeType = Desired Screen Resolution (0-7) -; (See SET_VGA_MODEX for list) -; -; EXIT: AX = Success Flag: 0 = Failure / -1= Success -; - -SM_STACK STRUC - DW ?,? ; BP, SI - DD ? ; Caller - SM_Mode DW ? ; Desired Screen Resolution -SM_STACK ENDS - - PUBLIC SET_MODEX - -SET_MODEX PROC FAR - - PUSHx BP, SI ; Preserve Important registers - MOV BP, SP ; Set up Stack Frame - - CLR AX ; Assume Failure - MOV BX, [BP].SM_Mode ; Get Desired Mode # - CMP BX, NUM_MODES ; Is it a Valid Mode #? - JAE @SMX_Exit ; If Not, don't Bother - - PUSH BX ; Push Mode Parameter - - SHL BX, 1 ; Scale BX to word Index - MOV SI, w MODE_TABLE[BX] ; CS:SI -> Mode Info - - PUSH CS:[SI].M_XSize ; Push Default X Size - PUSH CS:[SI].M_Ysize ; Push Default Y size - MOV AL, CS:[SI].M_Pages ; Get Default # of Pages - CLR AH ; Hi Byte = 0 - PUSH AX ; Push # Pages - - CALL f SET_VGA_MODEX ; Set up Mode X! - -@SMX_Exit: - POPx SI, BP ; Restore Registers - RET 2 ; Exit & Clean Up Stack - -SET_MODEX ENDP - - - ; ===== BASIC GRAPHICS PRIMITIVES ===== - -;============================ -;CLEAR_VGA_SCREEN (ColorNum%) -;============================ -; -; Clears the active display page -; -; ENTRY: ColorNum = Color Value to fill the page with -; -; EXIT: No meaningful values returned -; - -CVS_STACK STRUC - DW ?,? ; DI, BP - DD ? ; Caller - CVS_COLOR DB ?,? ; Color to Set Screen to -CVS_STACK ENDS - - PUBLIC CLEAR_VGA_SCREEN - -CLEAR_VGA_SCREEN PROC FAR - - PUSHx BP, DI ; Preserve Important Registers - MOV BP, SP ; Set up Stack Frame - - OUT_16 SC_INDEX, ALL_PLANES_ON ; Select All Planes - LES DI, d CURRENT_PAGE ; Point to Active VGA Page - - MOV AL, [BP].CVS_COLOR ; Get Color - MOV AH, AL ; Copy for Word Write - CLD ; Block fill Forwards - - MOV CX, PAGE_SIZE ; Get Size of Page - SHR CX, 1 ; Divide by 2 for Words - REP STOSW ; Block Fill VGA memory - - POPx DI, BP ; Restore Saved Registers - RET 2 ; Exit & Clean Up Stack - -CLEAR_VGA_SCREEN ENDP - - -;=================================== -;SET_POINT (Xpos%, Ypos%, ColorNum%) -;=================================== -; -; Plots a single Pixel on the active display page -; -; ENTRY: Xpos = X position to plot pixel at -; Ypos = Y position to plot pixel at -; ColorNum = Color to plot pixel with -; -; EXIT: No meaningful values returned -; - -SP_STACK STRUC - DW ?,? ; BP, DI - DD ? ; Caller - SETP_Color DB ?,? ; Color of Point to Plot - SETP_Ypos DW ? ; Y pos of Point to Plot - SETP_Xpos DW ? ; X pos of Point to Plot -SP_STACK ENDS - - PUBLIC SET_POINT - -SET_POINT PROC FAR - - PUSHx BP, DI ; Preserve Registers - MOV BP, SP ; Set up Stack Frame - - LES DI, d CURRENT_PAGE ; Point to Active VGA Page - - MOV AX, [BP].SETP_Ypos ; Get Line # of Pixel - MUL SCREEN_WIDTH ; Get Offset to Start of Line - - MOV BX, [BP].SETP_Xpos ; Get Xpos - MOV CX, BX ; Copy to extract Plane # from - SHR BX, 2 ; X offset (Bytes) = Xpos/4 - ADD BX, AX ; Offset = Width*Ypos + Xpos/4 - - MOV AX, MAP_MASK_PLANE1 ; Map Mask & Plane Select Register - AND CL, PLANE_BITS ; Get Plane Bits - SHL AH, CL ; Get Plane Select Value - OUT_16 SC_Index, AX ; Select Plane - - MOV AL,[BP].SETP_Color ; Get Pixel Color - MOV ES:[DI+BX], AL ; Draw Pixel - - POPx DI, BP ; Restore Saved Registers - RET 6 ; Exit and Clean up Stack - -SET_POINT ENDP - - -;========================== -;READ_POINT% (Xpos%, Ypos%) -;========================== -; -; Read the color of a pixel from the Active Display Page -; -; ENTRY: Xpos = X position of pixel to read -; Ypos = Y position of pixel to read -; -; EXIT: AX = Color of Pixel at (Xpos, Ypos) -; - -RP_STACK STRUC - DW ?,? ; BP, DI - DD ? ; Caller - RP_Ypos DW ? ; Y pos of Point to Read - RP_Xpos DW ? ; X pos of Point to Read -RP_STACK ENDS - - PUBLIC READ_POINT - -READ_POINT PROC FAR - - PUSHx BP, DI ; Preserve Registers - MOV BP, SP ; Set up Stack Frame - - LES DI, d CURRENT_PAGE ; Point to Active VGA Page - - MOV AX, [BP].RP_Ypos ; Get Line # of Pixel - MUL SCREEN_WIDTH ; Get Offset to Start of Line - - MOV BX, [BP].RP_Xpos ; Get Xpos - MOV CX, BX - SHR BX, 2 ; X offset (Bytes) = Xpos/4 - ADD BX, AX ; Offset = Width*Ypos + Xpos/4 - - MOV AL, READ_MAP ; GC Read Mask Register - MOV AH, CL ; Get Xpos - AND AH, PLANE_BITS ; & mask out Plane # - OUT_16 GC_INDEX, AX ; Select Plane to read in - - CLR AH ; Clear Return Value Hi byte - MOV AL, ES:[DI+BX] ; Get Color of Pixel - - POPx DI, BP ; Restore Saved Registers - RET 4 ; Exit and Clean up Stack - -READ_POINT ENDP - - -;====================================================== -;FILL_BLOCK (Xpos1%, Ypos1%, Xpos2%, Ypos2%, ColorNum%) -;====================================================== -; -; Fills a rectangular block on the active display Page -; -; ENTRY: Xpos1 = Left X position of area to fill -; Ypos1 = Top Y position of area to fill -; Xpos2 = Right X position of area to fill -; Ypos2 = Bottom Y position of area to fill -; ColorNum = Color to fill area with -; -; EXIT: No meaningful values returned -; - -FB_STACK STRUC - DW ?x4 ; DS, DI, SI, BP - DD ? ; Caller - FB_Color DB ?,? ; Fill Color - FB_Ypos2 DW ? ; Y pos of Lower Right Pixel - FB_Xpos2 DW ? ; X pos of Lower Right Pixel - FB_Ypos1 DW ? ; Y pos of Upper Left Pixel - FB_Xpos1 DW ? ; X pos of Upper Left Pixel -FB_STACK ENDS - - PUBLIC FILL_BLOCK - -FILL_BLOCK PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - MOV BP, SP ; Set up Stack Frame - - LES DI, d CURRENT_PAGE ; Point to Active VGA Page - CLD ; Direction Flag = Forward - - OUT_8 SC_INDEX, MAP_MASK ; Set up for Plane Select - - ; Validate Pixel Coordinates - ; If necessary, Swap so X1 <= X2, Y1 <= Y2 - - MOV AX, [BP].FB_Ypos1 ; AX = Y1 is Y1< Y2? - MOV BX, [BP].FB_Ypos2 ; BX = Y2 - CMP AX, BX - JLE @FB_NOSWAP1 - - MOV [BP].FB_Ypos1, BX ; Swap Y1 and Y2 and save Y1 - XCHG AX, BX ; on stack for future use - -@FB_NOSWAP1: - SUB BX, AX ; Get Y width - INC BX ; Add 1 to avoid 0 value - MOV [BP].FB_Ypos2, BX ; Save in Ypos2 - - MUL SCREEN_WIDTH ; Mul Y1 by Bytes per Line - ADD DI, AX ; DI = Start of Line Y1 - - MOV AX, [BP].FB_Xpos1 ; Check X1 <= X2 - MOV BX, [BP].FB_Xpos2 ; - CMP AX, BX - JLE @FB_NOSWAP2 ; Skip Ahead if Ok - - MOV [BP].FB_Xpos2, AX ; Swap X1 AND X2 and save X2 - XCHG AX, BX ; on stack for future use - - ; All our Input Values are in order, Now determine - ; How many full "bands" 4 pixels wide (aligned) there - ; are, and if there are partial bands (<4 pixels) on - ; the left and right edges. - -@FB_NOSWAP2: - MOV DX, AX ; DX = X1 (Pixel Position) - SHR DX, 2 ; DX/4 = Bytes into Line - ADD DI, DX ; DI = Addr of Upper-Left Corner - - MOV CX, BX ; CX = X2 (Pixel Position) - SHR CX, 2 ; CX/4 = Bytes into Line - - CMP DX, CX ; Start and end in same band? - JNE @FB_NORMAL ; if not, check for l & r edges - JMP @FB_ONE_BAND_ONLY ; if so, then special processing - -@FB_NORMAL: - SUB CX, DX ; CX = # bands -1 - MOV SI, AX ; SI = PLANE#(X1) - AND SI, PLANE_BITS ; if Left edge is aligned then - JZ @FB_L_PLANE_FLUSH ; no special processing.. - - ; Draw "Left Edge" vertical strip of 1-3 pixels... - - OUT_8 SC_Data, Left_Clip_Mask[SI] ; Set Left Edge Plane Mask - - MOV SI, DI ; SI = Copy of Start Addr (UL) - - MOV DX, [BP].FB_Ypos2 ; Get # of Lines to draw - MOV AL, [BP].FB_Color ; Get Fill Color - MOV BX, SCREEN_WIDTH ; Get Vertical increment Value - -@FB_LEFT_LOOP: - MOV ES:[SI], AL ; Fill in Left Edge Pixels - ADD SI, BX ; Point to Next Line (Below) - LOOPjz DX, @FB_LEFT_CONT ; Exit loop if all Lines Drawn - - MOV ES:[SI], AL ; Fill in Left Edge Pixels - ADD SI, BX ; Point to Next Line (Below) - LOOPx DX, @FB_LEFT_LOOP ; loop until left strip is drawn - -@FB_LEFT_CONT: - - INC DI ; Point to Middle (or Right) Block - DEC CX ; Reset CX instead of JMP @FB_RIGHT - -@FB_L_PLANE_FLUSH: - INC CX ; Add in Left band to middle block - - ; DI = Addr of 1st middle Pixel (band) to fill - ; CX = # of Bands to fill -1 - -@FB_RIGHT: - MOV SI, [BP].FB_Xpos2 ; Get Xpos2 - AND SI, PLANE_BITS ; Get Plane values - CMP SI, 0003 ; Plane = 3? - JE @FB_R_EDGE_FLUSH ; Hey, add to middle - - ; Draw "Right Edge" vertical strip of 1-3 pixels... - - OUT_8 SC_Data, Right_Clip_Mask[SI] ; Right Edge Plane Mask - - MOV SI, DI ; Get Addr of Left Edge - ADD SI, CX ; Add Width-1 (Bands) - DEC SI ; To point to top of Right Edge - - MOV DX, [BP].FB_Ypos2 ; Get # of Lines to draw - MOV AL, [BP].FB_Color ; Get Fill Color - MOV BX, SCREEN_WIDTH ; Get Vertical increment Value - -@FB_RIGHT_LOOP: - MOV ES:[SI], AL ; Fill in Right Edge Pixels - ADD SI, BX ; Point to Next Line (Below) - LOOPjz DX, @FB_RIGHT_CONT ; Exit loop if all Lines Drawn - - MOV ES:[SI], AL ; Fill in Right Edge Pixels - ADD SI, BX ; Point to Next Line (Below) - LOOPx DX, @FB_RIGHT_LOOP ; loop until left strip is drawn - -@FB_RIGHT_CONT: - - DEC CX ; Minus 1 for Middle bands - JZ @FB_EXIT ; Uh.. no Middle bands... - -@FB_R_EDGE_FLUSH: - - ; DI = Addr of Upper Left block to fill - ; CX = # of Bands to fill in (width) - - OUT_8 SC_Data, ALL_PLANES ; Write to All Planes - - MOV DX, SCREEN_WIDTH ; DX = DI Increment - SUB DX, CX ; = Screen_Width-# Planes Filled - - MOV BX, CX ; BX = Quick Refill for CX - MOV SI, [BP].FB_Ypos2 ; SI = # of Line to Fill - MOV AL, [BP].FB_Color ; Get Fill Color - -@FB_MIDDLE_LOOP: - REP STOSB ; Fill in entire line - - MOV CX, BX ; Recharge CX (Line Width) - ADD DI, DX ; Point to start of Next Line - LOOPx SI, @FB_MIDDLE_LOOP ; Loop until all lines drawn - - JMP s @FB_EXIT ; Outa here - -@FB_ONE_BAND_ONLY: - MOV SI, AX ; Get Left Clip Mask, Save X1 - AND SI, PLANE_BITS ; Mask out Row # - MOV AL, Left_Clip_Mask[SI] ; Get Left Edge Mask - MOV SI, BX ; Get Right Clip Mask, Save X2 - AND SI, PLANE_BITS ; Mask out Row # - AND AL, Right_Clip_Mask[SI] ; Get Right Edge Mask byte - - OUT_8 SC_Data, AL ; Clip For Left & Right Masks - - MOV CX, [BP].FB_Ypos2 ; Get # of Lines to draw - MOV AL, [BP].FB_Color ; Get Fill Color - MOV BX, SCREEN_WIDTH ; Get Vertical increment Value - -@FB_ONE_LOOP: - MOV ES:[DI], AL ; Fill in Pixels - ADD DI, BX ; Point to Next Line (Below) - LOOPjz CX, @FB_EXIT ; Exit loop if all Lines Drawn - - MOV ES:[DI], AL ; Fill in Pixels - ADD DI, BX ; Point to Next Line (Below) - LOOPx CX, @FB_ONE_LOOP ; loop until left strip is drawn - -@FB_EXIT: - POPx DI, SI, DS, BP ; Restore Saved Registers - RET 10 ; Exit and Clean up Stack - -FILL_BLOCK ENDP - - -;===================================================== -;DRAW_LINE (Xpos1%, Ypos1%, Xpos2%, Ypos2%, ColorNum%) -;===================================================== -; -; Draws a Line on the active display page -; -; ENTRY: Xpos1 = X position of first point on line -; Ypos1 = Y position of first point on line -; Xpos2 = X position of last point on line -; Ypos2 = Y position of last point on line -; ColorNum = Color to draw line with -; -; EXIT: No meaningful values returned -; - -DL_STACK STRUC - DW ?x3 ; DI, SI, BP - DD ? ; Caller - DL_ColorF DB ?,? ; Line Draw Color - DL_Ypos2 DW ? ; Y pos of last point - DL_Xpos2 DW ? ; X pos of last point - DL_Ypos1 DW ? ; Y pos of first point - DL_Xpos1 DW ? ; X pos of first point -DL_STACK ENDS - - PUBLIC DRAW_LINE - -DRAW_LINE PROC FAR - - PUSHx BP, SI, DI ; Preserve Important Registers - MOV BP, SP ; Set up Stack Frame - CLD ; Direction Flag = Forward - - OUT_8 SC_INDEX, MAP_MASK ; Set up for Plane Select - MOV CH, [BP].DL_ColorF ; Save Line Color in CH - - ; Check Line Type - - MOV SI, [BP].DL_Xpos1 ; AX = X1 is X1< X2? - MOV DI, [BP].DL_Xpos2 ; DX = X2 - CMP SI, DI ; Is X1 < X2 - JE @DL_VLINE ; If X1=X2, Draw Vertical Line - JL @DL_NOSWAP1 ; If X1 < X2, don't swap - - XCHG SI, DI ; X2 IS > X1, SO SWAP THEM - -@DL_NOSWAP1: - - ; SI = X1, DI = X2 - - MOV AX, [BP].DL_Ypos1 ; AX = Y1 is Y1 <> Y2? - CMP AX, [BP].DL_Ypos2 ; Y1 = Y2? - JE @DL_HORZ ; If so, Draw a Horizontal Line - - JMP @DL_BREZHAM ; Diagonal line... go do it... - - ; This Code draws a Horizontal Line in Mode X where: - ; SI = X1, DI = X2, and AX = Y1/Y2 - -@DL_HORZ: - - MUL SCREEN_WIDTH ; Offset = Ypos * Screen_Width - MOV DX, AX ; CX = Line offset into Page - - MOV AX, SI ; Get Left edge, Save X1 - AND SI, PLANE_BITS ; Mask out Row # - MOV BL, Left_Clip_Mask[SI] ; Get Left Edge Mask - MOV CX, DI ; Get Right edge, Save X2 - AND DI, PLANE_BITS ; Mask out Row # - MOV BH, Right_Clip_Mask[DI] ; Get Right Edge Mask byte - - SHR AX, 2 ; Get X1 Byte # (=X1/4) - SHR CX, 2 ; Get X2 Byte # (=X2/4) - - LES DI, d CURRENT_PAGE ; Point to Active VGA Page - ADD DI, DX ; Point to Start of Line - ADD DI, AX ; Point to Pixel X1 - - SUB CX, AX ; CX = # Of Bands (-1) to set - JNZ @DL_LONGLN ; jump if longer than one segment - - AND BL, BH ; otherwise, merge clip masks - -@DL_LONGLN: - - OUT_8 SC_Data, BL ; Set the Left Clip Mask - - MOV AL, [BP].DL_ColorF ; Get Line Color - MOV BL, AL ; BL = Copy of Line Color - STOSB ; Set Left (1-4) Pixels - - JCXZ @DL_EXIT ; Done if only one Line Segment - - DEC CX ; CX = # of Middle Segments - JZ @DL_XRSEG ; If no middle segments.... - - ; Draw Middle Segments - - OUT_8 DX, ALL_PLANES ; Write to ALL Planes - - MOV AL, BL ; Get Color from BL - REP STOSB ; Draw Middle (4 Pixel) Segments - -@DL_XRSEG: - OUT_8 DX, BH ; Select Planes for Right Clip Mask - MOV AL, BL ; Get Color Value - STOSB ; Draw Right (1-4) Pixels - - JMP s @DL_EXIT ; We Are Done... - - - ; This Code Draws A Vertical Line. On entry: - ; CH = Line Color, SI & DI = X1 - -@DL_VLINE: - - MOV AX, [BP].DL_Ypos1 ; AX = Y1 - MOV SI, [BP].DL_Ypos2 ; SI = Y2 - CMP AX, SI ; Is Y1 < Y2? - JLE @DL_NOSWAP2 ; if so, Don't Swap them - - XCHG AX, SI ; Ok, NOW Y1 < Y2 - -@DL_NOSWAP2: - - SUB SI, AX ; SI = Line Height (Y2-Y1+1) - INC SI - - ; AX = Y1, DI = X1, Get offset into Page into AX - - MUL SCREEN_WIDTH ; Offset = Y1 (AX) * Screen Width - MOV DX, DI ; Copy Xpos into DX - SHR DI, 2 ; DI = Xpos/4 - ADD AX, DI ; DI = Xpos/4 + ScreenWidth * Y1 - - LES DI, d CURRENT_PAGE ; Point to Active VGA Page - ADD DI, AX ; Point to Pixel X1, Y1 - - ;Select Plane - - MOV CL, DL ; CL = Save X1 - AND CL, PLANE_BITS ; Get X1 MOD 4 (Plane #) - MOV AX, MAP_MASK_PLANE1 ; Code to set Plane #1 - SHL AH, CL ; Change to Correct Plane # - OUT_16 SC_Index, AX ; Select Plane - - MOV AL, CH ; Get Saved Color - MOV BX, SCREEN_WIDTH ; Get Offset to Advance Line By - -@DL_VLoop: - MOV ES:[DI], AL ; Draw Single Pixel - ADD DI, BX ; Point to Next Line - LOOPjz SI, @DL_EXIT ; Lines--, Exit if done - - MOV ES:[DI], AL ; Draw Single Pixel - ADD DI, BX ; Point to Next Line - LOOPx SI, @DL_VLoop ; Lines--, Loop until Done - -@DL_EXIT: - - JMP @DL_EXIT2 ; Done! - - ; This code Draws a diagonal line in Mode X - -@DL_BREZHAM: - LES DI, d CURRENT_PAGE ; Point to Active VGA Page - - MOV AX, [BP].DL_Ypos1 ; get Y1 value - MOV BX, [BP].DL_Ypos2 ; get Y2 value - MOV CX, [BP].DL_Xpos1 ; Get Starting Xpos - - CMP BX, AX ; Y2-Y1 is? - JNC @DL_DeltaYOK ; if Y2>=Y1 then goto... - - XCHG BX, AX ; Swap em... - MOV CX, [BP].DL_Xpos2 ; Get New Starting Xpos - -@DL_DeltaYOK: - MUL SCREEN_WIDTH ; Offset = SCREEN_WIDTH * Y1 - - ADD DI, AX ; DI -> Start of Line Y1 on Page - MOV AX, CX ; AX = Xpos (X1) - SHR AX, 2 ; /4 = Byte Offset into Line - ADD DI, AX ; DI = Starting pos (X1,Y1) - - MOV AL, 11h ; Staring Mask - AND CL, PLANE_BITS ; Get Plane # - SHL AL, CL ; and shift into place - MOV AH, [BP].DL_ColorF ; Color in Hi Bytes - - PUSH AX ; Save Mask,Color... - - MOV AH, AL ; Plane # in AH - MOV AL, MAP_MASK ; Select Plane Register - OUT_16 SC_Index, AX ; Select initial plane - - MOV AX, [BP].DL_Xpos1 ; get X1 value - MOV BX, [BP].DL_Ypos1 ; get Y1 value - MOV CX, [BP].DL_Xpos2 ; get X2 value - MOV DX, [BP].DL_Ypos2 ; get Y2 value - - MOV BP, SCREEN_WIDTH ; Use BP for Line width to - ; to avoid extra memory access - - SUB DX, BX ; figure Delta_Y - JNC @DL_DeltaYOK2 ; jump if Y2 >= Y1 - - ADD BX, DX ; put Y2 into Y1 - NEG DX ; abs(Delta_Y) - XCHG AX, CX ; and exchange X1 and X2 - -@DL_DeltaYOK2: - MOV BX, 08000H ; seed for fraction accumulator - - SUB CX, AX ; figure Delta_X - JC @DL_DrawLeft ; if negative, go left - - JMP @DL_DrawRight ; Draw Line that slopes right - -@DL_DrawLeft: - - NEG CX ; abs(Delta_X) - - CMP CX, DX ; is Delta_X < Delta_Y? - JB @DL_SteepLeft ; yes, so go do steep line - ; (Delta_Y iterations) - - ; Draw a Shallow line to the left in Mode X - -@DL_ShallowLeft: - CLR AX ; zero low word of Delta_Y * 10000h - SUB AX, DX ; DX:AX <- DX * 0FFFFh - SBB DX, 0 ; include carry - DIV CX ; divide by Delta_X - - MOV SI, BX ; SI = Accumulator - MOV BX, AX ; BX = Add fraction - POP AX ; Get Color, Bit mask - MOV DX, SC_Data ; Sequence controller data register - INC CX ; Inc Delta_X so we can unroll loop - - ; Loop (x2) to Draw Pixels, Move Left, and Maybe Down... - -@DL_SLLLoop: - MOV ES:[DI], AH ; set first pixel, plane data set up - LOOPjz CX, @DL_SLLExit ; Delta_X--, Exit if done - - ADD SI, BX ; add numerator to accumulator - JNC @DL_SLLL2nc ; move down on carry - - ADD DI, BP ; Move Down one line... - -@DL_SLLL2nc: - DEC DI ; Left one addr - ROR AL, 1 ; Move Left one plane, back on 0 1 2 - CMP AL, 87h ; wrap?, if AL <88 then Carry set - ADC DI, 0 ; Adjust Address: DI = DI + Carry - OUT DX, AL ; Set up New Bit Plane mask - - MOV ES:[DI], AH ; set pixel - LOOPjz CX, @DL_SLLExit ; Delta_X--, Exit if done - - ADD SI, BX ; add numerator to accumulator, - JNC @DL_SLLL3nc ; move down on carry - - ADD DI, BP ; Move Down one line... - -@DL_SLLL3nc: ; Now move left a pixel... - DEC DI ; Left one addr - ROR AL, 1 ; Move Left one plane, back on 0 1 2 - CMP AL, 87h ; Wrap?, if AL <88 then Carry set - ADC DI, 0 ; Adjust Address: DI = DI + Carry - OUT DX, AL ; Set up New Bit Plane mask - JMP s @DL_SLLLoop ; loop until done - -@DL_SLLExit: - JMP @DL_EXIT2 ; and exit - - ; Draw a steep line to the left in Mode X - -@DL_SteepLeft: - CLR AX ; zero low word of Delta_Y * 10000h - XCHG DX, CX ; Delta_Y switched with Delta_X - DIV CX ; divide by Delta_Y - - MOV SI, BX ; SI = Accumulator - MOV BX, AX ; BX = Add Fraction - POP AX ; Get Color, Bit mask - MOV DX, SC_Data ; Sequence controller data register - INC CX ; Inc Delta_Y so we can unroll loop - - ; Loop (x2) to Draw Pixels, Move Down, and Maybe left - -@DL_STLLoop: - - MOV ES:[DI], AH ; set first pixel - LOOPjz CX, @DL_STLExit ; Delta_Y--, Exit if done - - ADD SI, BX ; add numerator to accumulator - JNC @DL_STLnc2 ; No carry, just move down! - - DEC DI ; Move Left one addr - ROR AL, 1 ; Move Left one plane, back on 0 1 2 - CMP AL, 87h ; Wrap?, if AL <88 then Carry set - ADC DI, 0 ; Adjust Address: DI = DI + Carry - OUT DX, AL ; Set up New Bit Plane mask - -@DL_STLnc2: - ADD DI, BP ; advance to next line. - - MOV ES:[DI], AH ; set pixel - LOOPjz CX, @DL_STLExit ; Delta_Y--, Exit if done - - ADD SI, BX ; add numerator to accumulator - JNC @DL_STLnc3 ; No carry, just move down! - - DEC DI ; Move Left one addr - ROR AL, 1 ; Move Left one plane, back on 0 1 2 - CMP AL, 87h ; Wrap?, if AL <88 then Carry set - ADC DI, 0 ; Adjust Address: DI = DI + Carry - OUT DX, AL ; Set up New Bit Plane mask - -@DL_STLnc3: - ADD DI, BP ; advance to next line. - JMP s @DL_STLLoop ; Loop until done - -@DL_STLExit: - JMP @DL_EXIT2 ; and exit - - ; Draw a line that goes to the Right... - -@DL_DrawRight: - CMP CX, DX ; is Delta_X < Delta_Y? - JB @DL_SteepRight ; yes, so go do steep line - ; (Delta_Y iterations) - - ; Draw a Shallow line to the Right in Mode X - -@DL_ShallowRight: - CLR AX ; zero low word of Delta_Y * 10000h - SUB AX, DX ; DX:AX <- DX * 0FFFFh - SBB DX, 0 ; include carry - DIV CX ; divide by Delta_X - - MOV SI, BX ; SI = Accumulator - MOV BX, AX ; BX = Add Fraction - POP AX ; Get Color, Bit mask - MOV DX, SC_Data ; Sequence controller data register - INC CX ; Inc Delta_X so we can unroll loop - - ; Loop (x2) to Draw Pixels, Move Right, and Maybe Down... - -@DL_SLRLoop: - MOV ES:[DI], AH ; set first pixel, mask is set up - LOOPjz CX, @DL_SLRExit ; Delta_X--, Exit if done.. - - ADD SI, BX ; add numerator to accumulator - JNC @DL_SLR2nc ; don't move down if carry not set - - ADD DI, BP ; Move Down one line... - -@DL_SLR2nc: ; Now move right a pixel... - ROL AL, 1 ; Move Right one addr if Plane = 0 - CMP AL, 12h ; Wrap? if AL >12 then Carry not set - ADC DI, 0 ; Adjust Address: DI = DI + Carry - OUT DX, AL ; Set up New Bit Plane mask - - MOV ES:[DI], AH ; set pixel - LOOPjz CX, @DL_SLRExit ; Delta_X--, Exit if done.. - - ADD SI, BX ; add numerator to accumulator - JNC @DL_SLR3nc ; don't move down if carry not set - - ADD DI, BP ; Move Down one line... - -@DL_SLR3nc: - ROL AL, 1 ; Move Right one addr if Plane = 0 - CMP AL, 12h ; Wrap? if AL >12 then Carry not set - ADC DI, 0 ; Adjust Address: DI = DI + Carry - OUT DX, AL ; Set up New Bit Plane mask - JMP s @DL_SLRLoop ; loop till done - -@DL_SLRExit: - JMP @DL_EXIT2 ; and exit - - ; Draw a Steep line to the Right in Mode X - -@DL_SteepRight: - CLR AX ; zero low word of Delta_Y * 10000h - XCHG DX, CX ; Delta_Y switched with Delta_X - DIV CX ; divide by Delta_Y - - MOV SI, BX ; SI = Accumulator - MOV BX, AX ; BX = Add Fraction - POP AX ; Get Color, Bit mask - MOV DX, SC_Data ; Sequence controller data register - INC CX ; Inc Delta_Y so we can unroll loop - - ; Loop (x2) to Draw Pixels, Move Down, and Maybe Right - -@STRLoop: - MOV ES:[DI], AH ; set first pixel, mask is set up - LOOPjz CX, @DL_EXIT2 ; Delta_Y--, Exit if Done - - ADD SI, BX ; add numerator to accumulator - JNC @STRnc2 ; if no carry then just go down... - - ROL AL, 1 ; Move Right one addr if Plane = 0 - CMP AL, 12h ; Wrap? if AL >12 then Carry not set - ADC DI, 0 ; Adjust Address: DI = DI + Carry - OUT DX, AL ; Set up New Bit Plane mask - -@STRnc2: - ADD DI, BP ; advance to next line. - - MOV ES:[DI], AH ; set pixel - LOOPjz CX, @DL_EXIT2 ; Delta_Y--, Exit if Done - - ADD SI, BX ; add numerator to accumulator - JNC @STRnc3 ; if no carry then just go down... - - ROL AL, 1 ; Move Right one addr if Plane = 0 - CMP AL, 12h ; Wrap? if AL >12 then Carry not set - ADC DI, 0 ; Adjust Address: DI = DI + Carry - OUT DX, AL ; Set up New Bit Plane mask - -@STRnc3: - ADD DI, BP ; advance to next line. - JMP s @STRLoop ; loop till done - -@DL_EXIT2: - POPx DI, SI, BP ; Restore Saved Registers - RET 10 ; Exit and Clean up Stack - -DRAW_LINE ENDP - - - ; ===== DAC COLOR REGISTER ROUTINES ===== - -;================================================= -;SET_DAC_REGISTER (Register%, Red%, Green%, Blue%) -;================================================= -; -; Sets a single (RGB) Vga Palette Register -; -; ENTRY: Register = The DAC # to modify (0-255) -; Red = The new Red Intensity (0-63) -; Green = The new Green Intensity (0-63) -; Blue = The new Blue Intensity (0-63) -; -; EXIT: No meaningful values returned -; - -SDR_STACK STRUC - DW ? ; BP - DD ? ; Caller - SDR_Blue DB ?,? ; Blue Data Value - SDR_Green DB ?,? ; Green Data Value - SDR_Red DB ?,? ; Red Data Value - SDR_Register DB ?,? ; Palette Register # -SDR_STACK ENDS - - PUBLIC SET_DAC_REGISTER - -SET_DAC_REGISTER PROC FAR - - PUSH BP ; Save BP - MOV BP, SP ; Set up Stack Frame - - ; Select which DAC Register to modify - - OUT_8 DAC_WRITE_ADDR, [BP].SDR_Register - - MOV DX, PEL_DATA_REG ; Dac Data Register - OUT_8 DX, [BP].SDR_Red ; Set Red Intensity - OUT_8 DX, [BP].SDR_Green ; Set Green Intensity - OUT_8 DX, [BP].SDR_Blue ; Set Blue Intensity - - POP BP ; Restore Registers - RET 8 ; Exit & Clean Up Stack - -SET_DAC_REGISTER ENDP - -;==================================================== -;GET_DAC_REGISTER (Register%, &Red%, &Green%, &Blue%) -;==================================================== -; -; Reads the RGB Values of a single Vga Palette Register -; -; ENTRY: Register = The DAC # to read (0-255) -; Red = Offset to Red Variable in DS -; Green = Offset to Green Variable in DS -; Blue = Offset to Blue Variable in DS -; -; EXIT: The values of the integer variables Red, -; Green, and Blue are set to the values -; taken from the specified DAC register. -; - -GDR_STACK STRUC - DW ? ; BP - DD ? ; Caller - GDR_Blue DW ? ; Addr of Blue Data Value in DS - GDR_Green DW ? ; Addr of Green Data Value in DS - GDR_Red DW ? ; Addr of Red Data Value in DS - GDR_Register DB ?,? ; Palette Register # -GDR_STACK ENDS - - PUBLIC GET_DAC_REGISTER - -GET_DAC_REGISTER PROC FAR - - PUSH BP ; Save BP - MOV BP, SP ; Set up Stack Frame - - ; Select which DAC Register to read in - - OUT_8 DAC_READ_ADDR, [BP].GDR_Register - - MOV DX, PEL_DATA_REG ; Dac Data Register - CLR AX ; Clear AX - - IN AL, DX ; Read Red Value - MOV BX, [BP].GDR_Red ; Get Address of Red% - MOV [BX], AX ; *Red% = AX - - IN AL, DX ; Read Green Value - MOV BX, [BP].GDR_Green ; Get Address of Green% - MOV [BX], AX ; *Green% = AX - - IN AL, DX ; Read Blue Value - MOV BX, [BP].GDR_Blue ; Get Address of Blue% - MOV [BX], AX ; *Blue% = AX - - POP BP ; Restore Registers - RET 8 ; Exit & Clean Up Stack - -GET_DAC_REGISTER ENDP - - -;=========================================================== -;LOAD_DAC_REGISTERS (SEG PalData, StartReg%, EndReg%, Sync%) -;=========================================================== -; -; Sets a Block of Vga Palette Registers -; -; ENTRY: PalData = Far Pointer to Block of palette data -; StartReg = First Register # in range to set (0-255) -; EndReg = Last Register # in Range to set (0-255) -; Sync = Wait for Vertical Retrace Flag (Boolean) -; -; EXIT: No meaningful values returned -; -; NOTES: PalData is a linear array of 3 byte Palette values -; in the order: Red (0-63), Green (0-63), Blue (0-63) -; - -LDR_STACK STRUC - DW ?x3 ; BP, DS, SI - DD ? ; Caller - LDR_Sync DW ? ; Vertical Sync Flag - LDR_EndReg DB ?,? ; Last Register # - LDR_StartReg DB ?,? ; First Register # - LDR_PalData DD ? ; Far Ptr to Palette Data -LDR_STACK ENDS - - PUBLIC LOAD_DAC_REGISTERS - -LOAD_DAC_REGISTERS PROC FAR - - PUSHx BP, DS, SI ; Save Registers - mov BP, SP ; Set up Stack Frame - - mov AX, [BP].LDR_Sync ; Get Vertical Sync Flag - or AX, AX ; is Sync Flag = 0? - jz @LDR_Load ; if so, skip call - - call f SYNC_DISPLAY ; wait for vsync - - ; Determine register #'s, size to copy, etc - -@LDR_Load: - - lds SI, [BP].LDR_PalData ; DS:SI -> Palette Data - mov DX, DAC_WRITE_ADDR ; DAC register # selector - - CLR AX, BX ; Clear for byte loads - mov AL, [BP].LDR_StartReg ; Get Start Register - mov BL, [BP].LDR_EndReg ; Get End Register - - sub BX, AX ; BX = # of DAC registers -1 - inc BX ; BX = # of DAC registers - mov CX, BX ; CX = # of DAC registers - add CX, BX ; CX = " " * 2 - add CX, BX ; CX = " " * 3 - cld ; Block OUTs forward - out DX, AL ; set up correct register # - - ; Load a block of DAC Registers - - mov DX, PEL_DATA_REG ; Dac Data Register - - rep outsb ; block set DAC registers - - POPx SI, DS, BP ; Restore Registers - ret 10 ; Exit & Clean Up Stack - -LOAD_DAC_REGISTERS ENDP - - -;==================================================== -;READ_DAC_REGISTERS (SEG PalData, StartReg%, EndReg%) -;==================================================== -; -; Reads a Block of Vga Palette Registers -; -; ENTRY: PalData = Far Pointer to block to store palette data -; StartReg = First Register # in range to read (0-255) -; EndReg = Last Register # in Range to read (0-255) -; -; EXIT: No meaningful values returned -; -; NOTES: PalData is a linear array of 3 byte Palette values -; in the order: Red (0-63), Green (0-63), Blue (0-63) -; - -RDR_STACK STRUC - DW ?x3 ; BP, ES, DI - DD ? ; Caller - RDR_EndReg DB ?,? ; Last Register # - RDR_StartReg DB ?,? ; First Register # - RDR_PalData DD ? ; Far Ptr to Palette Data -RDR_STACK ENDS - - PUBLIC READ_DAC_REGISTERS - -READ_DAC_REGISTERS PROC FAR - - PUSHx BP, ES, DI ; Save Registers - mov BP, SP ; Set up Stack Frame - - ; Determine register #'s, size to copy, etc - - les DI, [BP].RDR_PalData ; ES:DI -> Palette Buffer - mov DX, DAC_READ_ADDR ; DAC register # selector - - CLR AX, BX ; Clear for byte loads - mov AL, [BP].RDR_StartReg ; Get Start Register - mov BL, [BP].RDR_EndReg ; Get End Register - - sub BX, AX ; BX = # of DAC registers -1 - inc BX ; BX = # of DAC registers - mov CX, BX ; CX = # of DAC registers - add CX, BX ; CX = " " * 2 - add CX, BX ; CX = " " * 3 - cld ; Block INs forward - - ; Read a block of DAC Registers - - out DX, AL ; set up correct register # - mov DX, PEL_DATA_REG ; Dac Data Register - - rep insb ; block read DAC registers - - POPx DI, ES, BP ; Restore Registers - ret 8 ; Exit & Clean Up Stack - -READ_DAC_REGISTERS ENDP - - - ; ===== PAGE FLIPPING AND SCROLLING ROUTINES ===== - -;========================= -;SET_ACTIVE_PAGE (PageNo%) -;========================= -; -; Sets the active display Page to be used for future drawing -; -; ENTRY: PageNo = Display Page to make active -; (values: 0 to Number of Pages - 1) -; -; EXIT: No meaningful values returned -; - -SAP_STACK STRUC - DW ? ; BP - DD ? ; Caller - SAP_Page DW ? ; Page # for Drawing -SAP_STACK ENDS - - PUBLIC SET_ACTIVE_PAGE - -SET_ACTIVE_PAGE PROC FAR - - PUSH BP ; Preserve Registers - MOV BP, SP ; Set up Stack Frame - - MOV BX, [BP].SAP_Page ; Get Desired Page # - CMP BX, LAST_PAGE ; Is Page # Valid? - JAE @SAP_Exit ; IF Not, Do Nothing - - MOV ACTIVE_PAGE, BX ; Set Active Page # - - SHL BX, 1 ; Scale Page # to Word - MOV AX, PAGE_ADDR[BX] ; Get offset to Page - - MOV CURRENT_PAGE, AX ; And set for future LES's - -@SAP_Exit: - POP BP ; Restore Registers - RET 2 ; Exit and Clean up Stack - -SET_ACTIVE_PAGE ENDP - - -;================ -;GET_ACTIVE_PAGE% -;================ -; -; Returns the Video Page # currently used for Drawing -; -; ENTRY: No Parameters are passed -; -; EXIT: AX = Current Video Page used for Drawing -; - - PUBLIC GET_ACTIVE_PAGE - -GET_ACTIVE_PAGE PROC FAR - - MOV AX, ACTIVE_PAGE ; Get Active Page # - RET ; Exit and Clean up Stack - -GET_ACTIVE_PAGE ENDP - - -;=============================== -;SET_DISPLAY_PAGE (DisplayPage%) -;=============================== -; -; Sets the currently visible display page. -; When called this routine syncronizes the display -; to the vertical blank. -; -; ENTRY: PageNo = Display Page to show on the screen -; (values: 0 to Number of Pages - 1) -; -; EXIT: No meaningful values returned -; - -SDP_STACK STRUC - DW ? ; BP - DD ? ; Caller - SDP_Page DW ? ; Page # to Display... -SDP_STACK ENDS - - PUBLIC SET_DISPLAY_PAGE - -SET_DISPLAY_PAGE PROC FAR - - PUSH BP ; Preserve Registers - MOV BP, SP ; Set up Stack Frame - - MOV BX, [BP].SDP_Page ; Get Desired Page # - CMP BX, LAST_PAGE ; Is Page # Valid? - JAE @SDP_Exit ; IF Not, Do Nothing - - MOV DISPLAY_PAGE, BX ; Set Display Page # - - SHL BX, 1 ; Scale Page # to Word - MOV CX, PAGE_ADDR[BX] ; Get offset in memory to Page - ADD CX, CURRENT_MOFFSET ; Adjust for any scrolling - - ; Wait if we are currently in a Vertical Retrace - - MOV DX, INPUT_1 ; Input Status #1 Register - -@DP_WAIT0: - IN AL, DX ; Get VGA status - AND AL, VERT_RETRACE ; In Display mode yet? - JNZ @DP_WAIT0 ; If Not, wait for it - - ; Set the Start Display Address to the new page - - MOV DX, CRTC_Index ; We Change the VGA Sequencer - - MOV AL, START_DISP_LO ; Display Start Low Register - MOV AH, CL ; Low 8 Bits of Start Addr - OUT DX, AX ; Set Display Addr Low - - MOV AL, START_DISP_HI ; Display Start High Register - MOV AH, CH ; High 8 Bits of Start Addr - OUT DX, AX ; Set Display Addr High - - ; Wait for a Vertical Retrace to smooth out things - - MOV DX, INPUT_1 ; Input Status #1 Register - -@DP_WAIT1: - IN AL, DX ; Get VGA status - AND AL, VERT_RETRACE ; Vertical Retrace Start? - JZ @DP_WAIT1 ; If Not, wait for it - - ; Now Set Display Starting Address - - -@SDP_Exit: - POP BP ; Restore Registers - RET 2 ; Exit and Clean up Stack - -SET_DISPLAY_PAGE ENDP - - -;================= -;GET_DISPLAY_PAGE% -;================= -; -; Returns the Video Page # currently displayed -; -; ENTRY: No Parameters are passed -; -; EXIT: AX = Current Video Page being displayed -; - - PUBLIC GET_DISPLAY_PAGE - -GET_DISPLAY_PAGE PROC FAR - - MOV AX, DISPLAY_PAGE ; Get Display Page # - RET ; Exit & Clean Up Stack - -GET_DISPLAY_PAGE ENDP - - -;======================================= -;SET_WINDOW (DisplayPage%, Xpos%, Ypos%) -;======================================= -; -; Since a Logical Screen can be larger than the Physical -; Screen, Scrolling is possible. This routine sets the -; Upper Left Corner of the Screen to the specified Pixel. -; Also Sets the Display page to simplify combined page -; flipping and scrolling. When called this routine -; syncronizes the display to the vertical blank. -; -; ENTRY: DisplayPage = Display Page to show on the screen -; Xpos = # of pixels to shift screen right -; Ypos = # of lines to shift screen down -; -; EXIT: No meaningful values returned -; - -SW_STACK STRUC - DW ? ; BP - DD ? ; Caller - SW_Ypos DW ? ; Y pos of UL Screen Corner - SW_Xpos DW ? ; X pos of UL Screen Corner - SW_Page DW ? ; (new) Display Page -SW_STACK ENDS - - PUBLIC SET_WINDOW - -SET_WINDOW PROC FAR - - PUSH BP ; Preserve Registers - MOV BP, SP ; Set up Stack Frame - - ; Check if our Scroll Offsets are Valid - - MOV BX, [BP].SW_Page ; Get Desired Page # - CMP BX, LAST_PAGE ; Is Page # Valid? - JAE @SW_Exit ; IF Not, Do Nothing - - MOV AX, [BP].SW_Ypos ; Get Desired Y Offset - CMP AX, MAX_YOFFSET ; Is it Within Limits? - JA @SW_Exit ; if not, exit - - MOV CX, [BP].SW_Xpos ; Get Desired X Offset - CMP CX, MAX_XOFFSET ; Is it Within Limits? - JA @SW_Exit ; if not, exit - - ; Compute proper Display start address to use - - MUL SCREEN_WIDTH ; AX = YOffset * Line Width - SHR CX, 2 ; CX / 4 = Bytes into Line - ADD AX, CX ; AX = Offset of Upper Left Pixel - - MOV CURRENT_MOFFSET, AX ; Save Offset Info - - MOV DISPLAY_PAGE, BX ; Set Current Page # - SHL BX, 1 ; Scale Page # to Word - ADD AX, PAGE_ADDR[BX] ; Get offset in VGA to Page - MOV BX, AX ; BX = Desired Display Start - - MOV DX, INPUT_1 ; Input Status #1 Register - - ; Wait if we are currently in a Vertical Retrace - -@SW_WAIT0: - IN AL, DX ; Get VGA status - AND AL, VERT_RETRACE ; In Display mode yet? - JNZ @SW_WAIT0 ; If Not, wait for it - - ; Set the Start Display Address to the new window - - MOV DX, CRTC_Index ; We Change the VGA Sequencer - MOV AL, START_DISP_LO ; Display Start Low Register - MOV AH, BL ; Low 8 Bits of Start Addr - OUT DX, AX ; Set Display Addr Low - - MOV AL, START_DISP_HI ; Display Start High Register - MOV AH, BH ; High 8 Bits of Start Addr - OUT DX, AX ; Set Display Addr High - - ; Wait for a Vertical Retrace to smooth out things - - MOV DX, INPUT_1 ; Input Status #1 Register - -@SW_WAIT1: - IN AL, DX ; Get VGA status - AND AL, VERT_RETRACE ; Vertical Retrace Start? - JZ @SW_WAIT1 ; If Not, wait for it - - ; Now Set the Horizontal Pixel Pan values - - OUT_8 ATTRIB_Ctrl, PIXEL_PAN_REG ; Select Pixel Pan Register - - MOV AX, [BP].SW_Xpos ; Get Desired X Offset - AND AL, 03 ; Get # of Pixels to Pan (0-3) - SHL AL, 1 ; Shift for 256 Color Mode - OUT DX, AL ; Fine tune the display! - -@SW_Exit: - POP BP ; Restore Saved Registers - RET 6 ; Exit and Clean up Stack - -SET_WINDOW ENDP - - -;============= -;GET_X_OFFSET% -;============= -; -; Returns the X coordinate of the Pixel currently display -; in the upper left corner of the display -; -; ENTRY: No Parameters are passed -; -; EXIT: AX = Current Horizontal Scroll Offset -; - - PUBLIC GET_X_OFFSET - -GET_X_OFFSET PROC FAR - - MOV AX, CURRENT_XOFFSET ; Get current horz offset - RET ; Exit & Clean Up Stack - -GET_X_OFFSET ENDP - - -;============= -;GET_Y_OFFSET% -;============= -; -; Returns the Y coordinate of the Pixel currently display -; in the upper left corner of the display -; -; ENTRY: No Parameters are passed -; -; EXIT: AX = Current Vertical Scroll Offset -; - - PUBLIC GET_Y_OFFSET - -GET_Y_OFFSET PROC FAR - - MOV AX, CURRENT_YOFFSET ; Get current vertical offset - RET ; Exit & Clean Up Stack - -GET_Y_OFFSET ENDP - - -;============ -;SYNC_DISPLAY -;============ -; -; Pauses the computer until the next Vertical Retrace starts -; -; ENTRY: No Parameters are passed -; -; EXIT: No meaningful values returned -; - - PUBLIC SYNC_DISPLAY - -SYNC_DISPLAY PROC FAR - - MOV DX, INPUT_1 ; Input Status #1 Register - - ; Wait for any current retrace to end - -@SD_WAIT0: - IN AL, DX ; Get VGA status - AND AL, VERT_RETRACE ; In Display mode yet? - JNZ @SD_WAIT0 ; If Not, wait for it - - ; Wait for the start of the next vertical retrace - -@SD_WAIT1: - IN AL, DX ; Get VGA status - AND AL, VERT_RETRACE ; Vertical Retrace Start? - JZ @SD_WAIT1 ; If Not, wait for it - - RET ; Exit & Clean Up Stack - -SYNC_DISPLAY ENDP - - - ; ===== TEXT DISPLAY ROUTINES ===== - -;================================================== -;GPRINTC (CharNum%, Xpos%, Ypos%, ColorF%, ColorB%) -;================================================== -; -; Draws an ASCII Text Character using the currently selected -; 8x8 font on the active display page. It would be a simple -; exercise to make this routine process variable height fonts. -; -; ENTRY: CharNum = ASCII character # to draw -; Xpos = X position to draw Character at -; Ypos = Y position of to draw Character at -; ColorF = Color to draw text character in -; ColorB = Color to set background to -; -; EXIT: No meaningful values returned -; - -GPC_STACK STRUC - GPC_Width DW ? ; Screen Width-1 - GPC_Lines DB ?,? ; Scan lines to Decode - GPC_T_SETS DW ? ; Saved Charset Segment - GPC_T_SETO DW ? ; Saved Charset Offset - DW ?x4 ; DI, SI, DS, BP - DD ? ; Caller - GPC_ColorB DB ?,? ; Background Color - GPC_ColorF DB ?,? ; Text Color - GPC_Ypos DW ? ; Y Position to Print at - GPC_Xpos DW ? ; X position to Print at - GPC_Char DB ?,? ; Character to Print -GPC_STACK ENDS - - PUBLIC GPRINTC - -GPRINTC PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - SUB SP, 8 ; Allocate WorkSpace on Stack - MOV BP, SP ; Set up Stack Frame - - LES DI, d CURRENT_PAGE ; Point to Active VGA Page - - MOV AX, SCREEN_WIDTH ; Get Logical Line Width - MOV BX, AX ; BX = Screen Width - DEC BX ; = Screen Width-1 - MOV [BP].GPC_Width, BX ; Save for later use - - MUL [BP].GPC_Ypos ; Start of Line = Ypos * Width - ADD DI, AX ; DI -> Start of Line Ypos - - MOV AX, [BP].GPC_Xpos ; Get Xpos of Character - MOV CX, AX ; Save Copy of Xpos - SHR AX, 2 ; Bytes into Line = Xpos/4 - ADD DI, AX ; DI -> (Xpos, Ypos) - - ;Get Source ADDR of Character Bit Map & Save - - MOV AL, [BP].GPC_Char ; Get Character # - TEST AL, 080h ; Is Hi Bit Set? - JZ @GPC_LowChar ; Nope, use low char set ptr - - AND AL, 07Fh ; Mask Out Hi Bit - MOV BX, CHARSET_HI ; BX = Char Set Ptr:Offset - MOV DX, CHARSET_HI+2 ; DX = Char Set Ptr:Segment - JMP s @GPC_Set_Char ; Go Setup Character Ptr - -@GPC_LowChar: - - MOV BX, CHARSET_LOW ; BX = Char Set Ptr:Offset - MOV DX, CHARSET_LOW+2 ; DX = Char Set Ptr:Segment - -@GPC_Set_Char: - MOV [BP].GPC_T_SETS, DX ; Save Segment on Stack - - MOV AH, 0 ; Valid #'s are 0..127 - SHL AX, 3 ; * 8 Bytes Per Bitmap - ADD BX, AX ; BX = Offset of Selected char - MOV [BP].GPC_T_SETO, BX ; Save Offset on Stack - - AND CX, PLANE_BITS ; Get Plane # - MOV CH, ALL_PLANES ; Get Initial Plane mask - SHL CH, CL ; And shift into position - AND CH, ALL_PLANES ; And mask to lower nibble - - MOV AL, 04 ; 4-Plane # = # of initial - SUB AL, CL ; shifts to align bit mask - MOV CL, AL ; Shift Count for SHL - - ;Get segment of character map - - OUT_8 SC_Index, MAP_MASK ; Setup Plane selections - INC DX ; DX -> SC_Data - - MOV AL, 08 ; 8 Lines to Process - MOV [BP].GPC_Lines, AL ; Save on Stack - - MOV DS, [BP].GPC_T_SETS ; Point to character set - -@GPC_DECODE_CHAR_BYTE: - - MOV SI, [BP].GPC_T_SETO ; Get DS:SI = String - - MOV BH, [SI] ; Get Bit Map - INC SI ; Point to Next Line - MOV [BP].GPC_T_SETO, SI ; And save new Pointer... - - CLR AX ; Clear AX - - CLR BL ; Clear BL - ROL BX, CL ; BL holds left edge bits - MOV SI, BX ; Use as Table Index - AND SI, CHAR_BITS ; Get Low Bits - MOV AL, Char_Plane_Data[SI] ; Get Mask in AL - JZ @GPC_NO_LEFT1BITS ; Skip if No Pixels to set - - MOV AH, [BP].GPC_ColorF ; Get Foreground Color - OUT DX, AL ; Set up Screen Mask - MOV ES:[DI], AH ; Write Foreground color - -@GPC_NO_LEFT1BITS: - XOR AL, CH ; Invert mask for Background - JZ @GPC_NO_LEFT0BITS ; Hey, no need for this - - MOV AH, [BP].GPC_ColorB ; Get background Color - OUT DX, AL ; Set up Screen Mask - MOV ES:[DI], AH ; Write Foreground color - - ;Now Do Middle/Last Band - -@GPC_NO_LEFT0BITS: - INC DI ; Point to next Byte - ROL BX, 4 ; Shift 4 bits - - MOV SI, BX ; Make Lookup Pointer - AND SI, CHAR_BITS ; Get Low Bits - MOV AL, Char_Plane_Data[SI] ; Get Mask in AL - JZ @GPC_NO_MIDDLE1BITS ; Skip if no pixels to set - - MOV AH, [BP].GPC_ColorF ; Get Foreground Color - OUT DX, AL ; Set up Screen Mask - MOV ES:[DI], AH ; Write Foreground color - -@GPC_NO_MIDDLE1BITS: - XOR AL, ALL_PLANES ; Invert mask for Background - JZ @GPC_NO_MIDDLE0BITS ; Hey, no need for this - - MOV AH, [BP].GPC_ColorB ; Get background Color - OUT DX, AL ; Set up Screen Mask - MOV ES:[DI], AH ; Write Foreground color - -@GPC_NO_MIDDLE0BITS: - XOR CH, ALL_PLANES ; Invert Clip Mask - CMP CL, 4 ; Aligned by 4? - JZ @GPC_NEXT_LINE ; If so, Exit now.. - - INC DI ; Point to next Byte - ROL BX, 4 ; Shift 4 bits - - MOV SI, BX ; Make Lookup Pointer - AND SI, CHAR_BITS ; Get Low Bits - MOV AL, Char_Plane_Data[SI] ; Get Mask in AL - JZ @GPC_NO_RIGHT1BITS ; Skip if No Pixels to set - - MOV AH, [BP].GPC_ColorF ; Get Foreground Color - OUT DX, AL ; Set up Screen Mask - MOV ES:[DI], AH ; Write Foreground color - -@GPC_NO_RIGHT1BITS: - - XOR AL, CH ; Invert mask for Background - JZ @GPC_NO_RIGHT0BITS ; Hey, no need for this - - MOV AH, [BP].GPC_ColorB ; Get background Color - OUT DX, AL ; Set up Screen Mask - MOV ES:[DI], AH ; Write Foreground color - -@GPC_NO_RIGHT0BITS: - DEC DI ; Adjust for Next Line Advance - -@GPC_NEXT_LINE: - ADD DI, [BP].GPC_Width ; Point to Next Line - XOR CH, CHAR_BITS ; Flip the Clip mask back - - DEC [BP].GPC_Lines ; Count Down Lines - JZ @GPC_EXIT ; Ok... Done! - - JMP @GPC_DECODE_CHAR_BYTE ; Again! Hey! - -@GPC_EXIT: - ADD SP, 08 ; Deallocate stack workspace - POPx DI, SI, DS, BP ; Restore Saved Registers - RET 10 ; Exit and Clean up Stack - -GPRINTC ENDP - - -;========================================== -;TGPRINTC (CharNum%, Xpos%, Ypos%, ColorF%) -;========================================== -; -; Transparently draws an ASCII Text Character using the -; currently selected 8x8 font on the active display page. -; -; ENTRY: CharNum = ASCII character # to draw -; Xpos = X position to draw Character at -; Ypos = Y position of to draw Character at -; ColorF = Color to draw text character in -; -; EXIT: No meaningful values returned -; - -TGP_STACK STRUC - TGP_Width DW ? ; Screen Width-1 - TGP_Lines DB ?,? ; Scan lines to Decode - TGP_T_SETS DW ? ; Saved Charset Segment - TGP_T_SETO DW ? ; Saved Charset Offset - DW ?x4 ; DI, SI, DS, BP - DD ? ; Caller - TGP_ColorF DB ?,? ; Text Color - TGP_Ypos DW ? ; Y Position to Print at - TGP_Xpos DW ? ; X position to Print at - TGP_Char DB ?,? ; Character to Print -TGP_STACK ENDS - - PUBLIC TGPRINTC - -TGPRINTC PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - SUB SP, 8 ; Allocate WorkSpace on Stack - MOV BP, SP ; Set up Stack Frame - - LES DI, d CURRENT_PAGE ; Point to Active VGA Page - - MOV AX, SCREEN_WIDTH ; Get Logical Line Width - MOV BX, AX ; BX = Screen Width - DEC BX ; = Screen Width-1 - MOV [BP].TGP_Width, BX ; Save for later use - - MUL [BP].TGP_Ypos ; Start of Line = Ypos * Width - ADD DI, AX ; DI -> Start of Line Ypos - - MOV AX, [BP].TGP_Xpos ; Get Xpos of Character - MOV CX, AX ; Save Copy of Xpos - SHR AX, 2 ; Bytes into Line = Xpos/4 - ADD DI, AX ; DI -> (Xpos, Ypos) - - ;Get Source ADDR of Character Bit Map & Save - - MOV AL, [BP].TGP_Char ; Get Character # - TEST AL, 080h ; Is Hi Bit Set? - JZ @TGP_LowChar ; Nope, use low char set ptr - - AND AL, 07Fh ; Mask Out Hi Bit - MOV BX, CHARSET_HI ; BX = Char Set Ptr:Offset - MOV DX, CHARSET_HI+2 ; DX = Char Set Ptr:Segment - JMP s @TGP_Set_Char ; Go Setup Character Ptr - -@TGP_LowChar: - - MOV BX, CHARSET_LOW ; BX = Char Set Ptr:Offset - MOV DX, CHARSET_LOW+2 ; DX = Char Set Ptr:Segment - -@TGP_Set_Char: - MOV [BP].TGP_T_SETS, DX ; Save Segment on Stack - - MOV AH, 0 ; Valid #'s are 0..127 - SHL AX, 3 ; * 8 Bytes Per Bitmap - ADD BX, AX ; BX = Offset of Selected char - MOV [BP].TGP_T_SETO, BX ; Save Offset on Stack - - AND CX, PLANE_BITS ; Get Plane # - MOV CH, ALL_PLANES ; Get Initial Plane mask - SHL CH, CL ; And shift into position - AND CH, ALL_PLANES ; And mask to lower nibble - - MOV AL, 04 ; 4-Plane # = # of initial - SUB AL, CL ; shifts to align bit mask - MOV CL, AL ; Shift Count for SHL - - ;Get segment of character map - - OUT_8 SC_Index, MAP_MASK ; Setup Plane selections - INC DX ; DX -> SC_Data - - MOV AL, 08 ; 8 Lines to Process - MOV [BP].TGP_Lines, AL ; Save on Stack - - MOV DS, [BP].TGP_T_SETS ; Point to character set - -@TGP_DECODE_CHAR_BYTE: - - MOV SI, [BP].TGP_T_SETO ; Get DS:SI = String - - MOV BH, [SI] ; Get Bit Map - INC SI ; Point to Next Line - MOV [BP].TGP_T_SETO, SI ; And save new Pointer... - - MOV AH, [BP].TGP_ColorF ; Get Foreground Color - - CLR BL ; Clear BL - ROL BX, CL ; BL holds left edge bits - MOV SI, BX ; Use as Table Index - AND SI, CHAR_BITS ; Get Low Bits - MOV AL, Char_Plane_Data[SI] ; Get Mask in AL - JZ @TGP_NO_LEFT1BITS ; Skip if No Pixels to set - - OUT DX, AL ; Set up Screen Mask - MOV ES:[DI], AH ; Write Foreground color - - ;Now Do Middle/Last Band - -@TGP_NO_LEFT1BITS: - - INC DI ; Point to next Byte - ROL BX, 4 ; Shift 4 bits - - MOV SI, BX ; Make Lookup Pointer - AND SI, CHAR_BITS ; Get Low Bits - MOV AL, Char_Plane_Data[SI] ; Get Mask in AL - JZ @TGP_NO_MIDDLE1BITS ; Skip if no pixels to set - - OUT DX, AL ; Set up Screen Mask - MOV ES:[DI], AH ; Write Foreground color - -@TGP_NO_MIDDLE1BITS: - XOR CH, ALL_PLANES ; Invert Clip Mask - CMP CL, 4 ; Aligned by 4? - JZ @TGP_NEXT_LINE ; If so, Exit now.. - - INC DI ; Point to next Byte - ROL BX, 4 ; Shift 4 bits - - MOV SI, BX ; Make Lookup Pointer - AND SI, CHAR_BITS ; Get Low Bits - MOV AL, Char_Plane_Data[SI] ; Get Mask in AL - JZ @TGP_NO_RIGHT1BITS ; Skip if No Pixels to set - - OUT DX, AL ; Set up Screen Mask - MOV ES:[DI], AH ; Write Foreground color - -@TGP_NO_RIGHT1BITS: - - DEC DI ; Adjust for Next Line Advance - -@TGP_NEXT_LINE: - ADD DI, [BP].TGP_Width ; Point to Next Line - XOR CH, CHAR_BITS ; Flip the Clip mask back - - DEC [BP].TGP_Lines ; Count Down Lines - JZ @TGP_EXIT ; Ok... Done! - - JMP @TGP_DECODE_CHAR_BYTE ; Again! Hey! - -@TGP_EXIT: - ADD SP, 08 ; Deallocate stack workspace - POPx DI, SI, DS, BP ; Restore Saved Registers - RET 8 ; Exit and Clean up Stack - -TGPRINTC ENDP - - -;=============================================================== -;PRINT_STR (SEG String, MaxLen%, Xpos%, Ypos%, ColorF%, ColorB%) -;=============================================================== -; -; Routine to quickly Print a null terminated ASCII string on the -; active display page up to a maximum length. -; -; ENTRY: String = Far Pointer to ASCII string to print -; MaxLen = # of characters to print if no null found -; Xpos = X position to draw Text at -; Ypos = Y position of to draw Text at -; ColorF = Color to draw text in -; ColorB = Color to set background to -; -; EXIT: No meaningful values returned -; - -PS_STACK STRUC - DW ?x4 ; DI, SI, DS, BP - DD ? ; Caller - PS_ColorB DW ? ; Background Color - PS_ColorF DW ? ; Text Color - PS_Ypos DW ? ; Y Position to Print at - PS_Xpos DW ? ; X position to Print at - PS_Len DW ? ; Maximum Length of string to print - PS_Text DW ?,? ; Far Ptr to Text String -PS_STACK ENDS - - PUBLIC PRINT_STR - -PRINT_STR PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - MOV BP, SP ; Set up Stack Frame - -@PS_Print_It: - - MOV CX, [BP].PS_Len ; Get Remaining text Length - JCXZ @PS_Exit ; Exit when out of text - - LES DI, d [BP].PS_Text ; ES:DI -> Current Char in Text - MOV AL, ES:[DI] ; AL = Text Character - AND AX, 00FFh ; Clear High Word - JZ @PS_Exit ; Exit if null character - - DEC [BP].PS_Len ; Remaining Text length-- - INC [BP].PS_Text ; Point to Next text char - - ; Set up Call to GPRINTC - - PUSH AX ; Set Character Parameter - MOV BX, [BP].PS_Xpos ; Get Xpos - PUSH BX ; Set Xpos Parameter - ADD BX, 8 ; Advance 1 Char to Right - MOV [BP].PS_Xpos, BX ; Save for next time through - - MOV BX, [BP].PS_Ypos ; Get Ypos - PUSH BX ; Set Ypos Parameter - - MOV BX, [BP].PS_ColorF ; Get Text Color - PUSH BX ; Set ColorF Parameter - - MOV BX, [BP].PS_ColorB ; Get Background Color - PUSH BX ; Set ColorB Parameter - - CALL f GPRINTC ; Print Character! - JMP s @PS_Print_It ; Process next character - -@PS_Exit: - POPx DI, SI, DS, BP ; Restore Saved Registers - RET 14 ; Exit and Clean up Stack - -PRINT_STR ENDP - - -;================================================================ -;TPRINT_STR (SEG String, MaxLen%, Xpos%, Ypos%, ColorF%, ColorB%) -;================================================================ -; -; Routine to quickly transparently Print a null terminated ASCII -; string on the active display page up to a maximum length. -; -; ENTRY: String = Far Pointer to ASCII string to print -; MaxLen = # of characters to print if no null found -; Xpos = X position to draw Text at -; Ypos = Y position of to draw Text at -; ColorF = Color to draw text in -; -; EXIT: No meaningful values returned -; - -TPS_STACK STRUC - DW ?x4 ; DI, SI, DS, BP - DD ? ; Caller - TPS_ColorF DW ? ; Text Color - TPS_Ypos DW ? ; Y Position to Print at - TPS_Xpos DW ? ; X position to Print at - TPS_Len DW ? ; Maximum Length of string to print - TPS_Text DW ?,? ; Far Ptr to Text String -TPS_STACK ENDS - - PUBLIC TPRINT_STR - -TPRINT_STR PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - MOV BP, SP ; Set up Stack Frame - -@TPS_Print_It: - - MOV CX, [BP].TPS_Len ; Get Remaining text Length - JCXZ @TPS_Exit ; Exit when out of text - - LES DI, d [BP].TPS_Text ; ES:DI -> Current Char in Text - MOV AL, ES:[DI] ; AL = Text Character - AND AX, 00FFh ; Clear High Word - JZ @TPS_Exit ; Exit if null character - - DEC [BP].TPS_Len ; Remaining Text length-- - INC [BP].TPS_Text ; Point to Next text char - - ; Set up Call to TGPRINTC - - PUSH AX ; Set Character Parameter - MOV BX, [BP].TPS_Xpos ; Get Xpos - PUSH BX ; Set Xpos Parameter - ADD BX, 8 ; Advance 1 Char to Right - MOV [BP].TPS_Xpos, BX ; Save for next time through - - MOV BX, [BP].TPS_Ypos ; Get Ypos - PUSH BX ; Set Ypos Parameter - - MOV BX, [BP].TPS_ColorF ; Get Text Color - PUSH BX ; Set ColorF Parameter - - CALL f TGPRINTC ; Print Character! - JMP s @TPS_Print_It ; Process next character - -@TPS_Exit: - POPx DI, SI, DS, BP ; Restore Saved Registers - RET 12 ; Exit and Clean up Stack - -TPRINT_STR ENDP - - -;=========================================== -;SET_DISPLAY_FONT(SEG FontData, FontNumber%) -;=========================================== -; -; Allows the user to specify their own font data for -; wither the lower or upper 128 characters. -; -; ENTRY: FontData = Far Pointer to Font Bitmaps -; FontNumber = Which half of set this is -; = 0, Lower 128 characters -; = 1, Upper 128 characters -; -; EXIT: No meaningful values returned -; - -SDF_STACK STRUC - DW ? ; BP - DD ? ; Caller - SDF_Which DW ? ; Hi Table/Low Table Flag - SDF_Font DD ? ; Far Ptr to Font Table -SDF_STACK ENDS - - PUBLIC SET_DISPLAY_FONT - -SET_DISPLAY_FONT PROC FAR - - PUSH BP ; Preserve Registers - MOV BP, SP ; Set up Stack Frame - - LES DI, [BP].SDF_Font ; Get Far Ptr to Font - - MOV SI, o CHARSET_LOW ; Assume Lower 128 chars - TEST [BP].SDF_Which, 1 ; Font #1 selected? - JZ @SDF_Set_Font ; If not, skip ahead - - MOV SI, o CHARSET_HI ; Ah, really it's 128-255 - -@SDF_Set_Font: - MOV [SI], DI ; Set Font Pointer Offset - MOV [SI+2], ES ; Set Font Pointer Segment - - POP BP ; Restore Registers - RET 6 ; We are Done.. Outa here - -SET_DISPLAY_FONT ENDP - - - ; ===== BITMAP (SPRITE) DISPLAY ROUTINES ===== - -;====================================================== -;DRAW_BITMAP (SEG Image, Xpos%, Ypos%, Width%, Height%) -;====================================================== -; -; Draws a variable sized Graphics Bitmap such as a -; picture or an Icon on the current Display Page in -; Mode X. The Bitmap is stored in a linear byte array -; corresponding to (0,0) (1,0), (2,0) .. (Width, Height) -; This is the same linear manner as mode 13h graphics. -; -; ENTRY: Image = Far Pointer to Bitmap Data -; Xpos = X position to Place Upper Left pixel at -; Ypos = Y position to Place Upper Left pixel at -; Width = Width of the Bitmap in Pixels -; Height = Height of the Bitmap in Pixels -; -; EXIT: No meaningful values returned -; - -DB_STACK STRUC - DB_LineO DW ? ; Offset to Next Line - DB_PixCount DW ? ; (Minimum) # of Pixels/Line - DB_Start DW ? ; Addr of Upper Left Pixel - DB_PixSkew DW ? ; # of bytes to Adjust EOL - DB_SkewFlag DW ? ; Extra Pix on Plane Flag - DW ?x4 ; DI, SI, DS, BP - DD ? ; Caller - DB_Height DW ? ; Height of Bitmap in Pixels - DB_Width DW ? ; Width of Bitmap in Pixels - DB_Ypos DW ? ; Y position to Draw Bitmap at - DB_Xpos DW ? ; X position to Draw Bitmap at - DB_Image DD ? ; Far Pointer to Graphics Bitmap -DB_STACK ENDS - - PUBLIC DRAW_BITMAP - -DRAW_BITMAP PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - SUB SP, 10 ; Allocate workspace - MOV BP, SP ; Set up Stack Frame - - LES DI, d CURRENT_PAGE ; Point to Active VGA Page - CLD ; Direction Flag = Forward - - MOV AX, [BP].DB_Ypos ; Get UL Corner Ypos - MUL SCREEN_WIDTH ; AX = Offset to Line Ypos - - MOV BX, [BP].DB_Xpos ; Get UL Corner Xpos - MOV CL, BL ; Save Plane # in CL - SHR BX, 2 ; Xpos/4 = Offset Into Line - - ADD DI, AX ; ES:DI -> Start of Line - ADD DI, BX ; ES:DI -> Upper Left Pixel - MOV [BP].DB_Start, DI ; Save Starting Addr - - ; Compute line to line offset - - MOV BX, [BP].DB_Width ; Get Width of Image - MOV DX, BX ; Save Copy in DX - SHR BX, 2 ; /4 = width in bands - MOV AX, SCREEN_WIDTH ; Get Screen Width - SUB AX, BX ; - (Bitmap Width/4) - - MOV [BP].DB_LineO, AX ; Save Line Width offset - MOV [BP].DB_PixCount, BX ; Minimum # pix to copy - - AND DX, PLANE_BITS ; Get "partial band" size (0-3) - MOV [BP].DB_PixSkew, DX ; Also End of Line Skew - MOV [BP].DB_SkewFlag, DX ; Save as Flag/Count - - AND CX, PLANE_BITS ; CL = Starting Plane # - MOV AX, MAP_MASK_PLANE2 ; Plane Mask & Plane Select - SHL AH, CL ; Select correct Plane - OUT_16 SC_Index, AX ; Select Plane... - MOV BH, AH ; BH = Saved Plane Mask - MOV BL, 4 ; BL = Planes to Copy - -@DB_COPY_PLANE: - - LDS SI, [BP].DB_Image ; DS:SI-> Source Image - MOV DX, [BP].DB_Height ; # of Lines to Copy - MOV DI, [BP].DB_Start ; ES:DI-> Dest pos - -@DB_COPY_LINE: - MOV CX, [BP].DB_PixCount ; Min # to copy - - TEST CL, 0FCh ; 16+PixWide? - JZ @DB_COPY_REMAINDER ; Nope... - - ; Pixel Copy loop has been unrolled to x4 - -@DB_COPY_LOOP: - MOVSB ; Copy Bitmap Pixel - ADD SI, 3 ; Skip to Next Byte in same plane - MOVSB ; Copy Bitmap Pixel - ADD SI, 3 ; Skip to Next Byte in same plane - MOVSB ; Copy Bitmap Pixel - ADD SI, 3 ; Skip to Next Byte in same plane - MOVSB ; Copy Bitmap Pixel - ADD SI, 3 ; Skip to Next Byte in same plane - - SUB CL, 4 ; Pixels to Copy=-4 - TEST CL, 0FCh ; 4+ Pixels Left? - JNZ @DB_COPY_LOOP ; if so, do another block - -@DB_COPY_REMAINDER: - JCXZ @DB_NEXT_LINE ; Any Pixels left on line - -@DB_COPY2: - MOVSB ; Copy Bitmap Pixel - ADD SI,3 ; Skip to Next Byte in same plane - LOOPx CX, @DB_COPY2 ; Pixels to Copy--, Loop until done - -@DB_NEXT_LINE: - - ; any Partial Pixels? (some planes only) - - OR CX, [BP].DB_SkewFlag ; Get Skew Count - JZ @DB_NEXT2 ; if no partial pixels - - MOVSB ; Copy Bitmap Pixel - DEC DI ; Back up to align - DEC SI ; Back up to align - -@DB_NEXT2: - ADD SI, [BP].DB_PixSkew ; Adjust Skew - ADD DI, [BP].DB_LineO ; Set to Next Display Line - LOOPx DX, @DB_COPY_LINE ; Lines to Copy--, Loop if more - - ; Copy Next Plane.... - - DEC BL ; Planes to Go-- - JZ @DB_Exit ; Hey! We are done - - ROL BH, 1 ; Next Plane in line... - OUT_8 SC_Data, BH ; Select Plane - - CMP AL, 12h ; Carry Set if AL=11h - ADC [BP].DB_Start, 0 ; Screen Addr =+Carry - INC w [BP].DB_Image ; Start @ Next Byte - - SUB [BP].DB_SkewFlag, 1 ; Reduce Planes to Skew - ADC [BP].DB_SkewFlag, 0 ; Back to 0 if it was -1 - - JMP s @DB_COPY_PLANE ; Go Copy the Next Plane - -@DB_Exit: - ADD SP, 10 ; Deallocate workspace - POPx DI, SI, DS, BP ; Restore Saved Registers - RET 12 ; Exit and Clean up Stack - -DRAW_BITMAP ENDP - - -;======================================================= -;TDRAW_BITMAP (SEG Image, Xpos%, Ypos%, Width%, Height%) -;======================================================= -; -; Transparently Draws a variable sized Graphics Bitmap -; such as a picture or an Icon on the current Display Page -; in Mode X. Pixels with a value of 0 are not drawn, -; leaving the previous "background" contents intact. -; -; The Bitmap format is the same as for the DRAW_BITMAP function. -; -; ENTRY: Image = Far Pointer to Bitmap Data -; Xpos = X position to Place Upper Left pixel at -; Ypos = Y position to Place Upper Left pixel at -; Width = Width of the Bitmap in Pixels -; Height = Height of the Bitmap in Pixels -; -; EXIT: No meaningful values returned -; - -TB_STACK STRUC - TB_LineO DW ? ; Offset to Next Line - TB_PixCount DW ? ; (Minimum) # of Pixels/Line - TB_Start DW ? ; Addr of Upper Left Pixel - TB_PixSkew DW ? ; # of bytes to Adjust EOL - TB_SkewFlag DW ? ; Extra Pix on Plane Flag - DW ?x4 ; DI, SI, DS, BP - DD ? ; Caller - TB_Height DW ? ; Height of Bitmap in Pixels - TB_Width DW ? ; Width of Bitmap in Pixels - TB_Ypos DW ? ; Y position to Draw Bitmap at - TB_Xpos DW ? ; X position to Draw Bitmap at - TB_Image DD ? ; Far Pointer to Graphics Bitmap -TB_STACK ENDS - - PUBLIC TDRAW_BITMAP - -TDRAW_BITMAP PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - SUB SP, 10 ; Allocate workspace - MOV BP, SP ; Set up Stack Frame - - LES DI, d CURRENT_PAGE ; Point to Active VGA Page - CLD ; Direction Flag = Forward - - MOV AX, [BP].TB_Ypos ; Get UL Corner Ypos - MUL SCREEN_WIDTH ; AX = Offset to Line Ypos - - MOV BX, [BP].TB_Xpos ; Get UL Corner Xpos - MOV CL, BL ; Save Plane # in CL - SHR BX, 2 ; Xpos/4 = Offset Into Line - - ADD DI, AX ; ES:DI -> Start of Line - ADD DI, BX ; ES:DI -> Upper Left Pixel - MOV [BP].TB_Start, DI ; Save Starting Addr - - ; Compute line to line offset - - MOV BX, [BP].TB_Width ; Get Width of Image - MOV DX, BX ; Save Copy in DX - SHR BX, 2 ; /4 = width in bands - MOV AX, SCREEN_WIDTH ; Get Screen Width - SUB AX, BX ; - (Bitmap Width/4) - - MOV [BP].TB_LineO, AX ; Save Line Width offset - MOV [BP].TB_PixCount, BX ; Minimum # pix to copy - - AND DX, PLANE_BITS ; Get "partial band" size (0-3) - MOV [BP].TB_PixSkew, DX ; Also End of Line Skew - MOV [BP].TB_SkewFlag, DX ; Save as Flag/Count - - AND CX, PLANE_BITS ; CL = Starting Plane # - MOV AX, MAP_MASK_PLANE2 ; Plane Mask & Plane Select - SHL AH, CL ; Select correct Plane - OUT_16 SC_Index, AX ; Select Plane... - MOV BH, AH ; BH = Saved Plane Mask - MOV BL, 4 ; BL = Planes to Copy - -@TB_COPY_PLANE: - - LDS SI, [BP].TB_Image ; DS:SI-> Source Image - MOV DX, [BP].TB_Height ; # of Lines to Copy - MOV DI, [BP].TB_Start ; ES:DI-> Dest pos - - ; Here AH is set with the value to be considered - ; "Transparent". It can be changed! - - MOV AH, 0 ; Value to Detect 0 - -@TB_COPY_LINE: - MOV CX, [BP].TB_PixCount ; Min # to copy - - TEST CL, 0FCh ; 16+PixWide? - JZ @TB_COPY_REMAINDER ; Nope... - - ; Pixel Copy loop has been unrolled to x4 - -@TB_COPY_LOOP: - LODSB ; Get Pixel Value in AL - ADD SI, 3 ; Skip to Next Byte in same plane - CMP AL, AH ; It is "Transparent"? - JE @TB_SKIP_01 ; Skip ahead if so - MOV ES:[DI], AL ; Copy Pixel to VGA screen - -@TB_SKIP_01: - LODSB ; Get Pixel Value in AL - ADD SI, 3 ; Skip to Next Byte in same plane - CMP AL, AH ; It is "Transparent"? - JE @TB_SKIP_02 ; Skip ahead if so - MOV ES:[DI+1], AL ; Copy Pixel to VGA screen - -@TB_SKIP_02: - LODSB ; Get Pixel Value in AL - ADD SI, 3 ; Skip to Next Byte in same plane - CMP AL, AH ; It is "Transparent"? - JE @TB_SKIP_03 ; Skip ahead if so - MOV ES:[DI+2], AL ; Copy Pixel to VGA screen - -@TB_SKIP_03: - LODSB ; Get Pixel Value in AL - ADD SI, 3 ; Skip to Next Byte in same plane - CMP AL, AH ; It is "Transparent"? - JE @TB_SKIP_04 ; Skip ahead if so - MOV ES:[DI+3], AL ; Copy Pixel to VGA screen - -@TB_SKIP_04: - ADD DI, 4 ; Adjust Pixel Write Location - SUB CL, 4 ; Pixels to Copy=-4 - TEST CL, 0FCh ; 4+ Pixels Left? - JNZ @TB_COPY_LOOP ; if so, do another block - -@TB_COPY_REMAINDER: - JCXZ @TB_NEXT_LINE ; Any Pixels left on line - -@TB_COPY2: - LODSB ; Get Pixel Value in AL - ADD SI, 3 ; Skip to Next Byte in same plane - CMP AL, AH ; It is "Transparent"? - JE @TB_SKIP_05 ; Skip ahead if so - MOV ES:[DI], AL ; Copy Pixel to VGA screen - -@TB_SKIP_05: - INC DI ; Advance Dest Addr - LOOPx CX, @TB_COPY2 ; Pixels to Copy--, Loop until done - -@TB_NEXT_LINE: - - ; any Partial Pixels? (some planes only) - - OR CX, [BP].TB_SkewFlag ; Get Skew Count - JZ @TB_NEXT2 ; if no partial pixels - - LODSB ; Get Pixel Value in AL - DEC SI ; Backup to Align - CMP AL, AH ; It is "Transparent"? - JE @TB_NEXT2 ; Skip ahead if so - MOV ES:[DI], AL ; Copy Pixel to VGA screen - -@TB_NEXT2: - ADD SI, [BP].TB_PixSkew ; Adjust Skew - ADD DI, [BP].TB_LineO ; Set to Next Display Line - LOOPx DX, @TB_COPY_LINE ; Lines to Copy--, Loop if More - - ;Copy Next Plane.... - - DEC BL ; Planes to Go-- - JZ @TB_Exit ; Hey! We are done - - ROL BH, 1 ; Next Plane in line... - OUT_8 SC_Data, BH ; Select Plane - - CMP AL, 12h ; Carry Set if AL=11h - ADC [BP].TB_Start, 0 ; Screen Addr =+Carry - INC w [BP].TB_Image ; Start @ Next Byte - - SUB [BP].TB_SkewFlag, 1 ; Reduce Planes to Skew - ADC [BP].TB_SkewFlag, 0 ; Back to 0 if it was -1 - - JMP @TB_COPY_PLANE ; Go Copy the next Plane - -@TB_Exit: - ADD SP, 10 ; Deallocate workspace - POPx DI, SI, DS, BP ; Restore Saved Registers - RET 12 ; Exit and Clean up Stack - -TDRAW_BITMAP ENDP - - - ; ==== VIDEO MEMORY to VIDEO MEMORY COPY ROUTINES ===== - -;================================== -;COPY_PAGE (SourcePage%, DestPage%) -;================================== -; -; Duplicate on display page onto another -; -; ENTRY: SourcePage = Display Page # to Duplicate -; DestPage = Display Page # to hold copy -; -; EXIT: No meaningful values returned -; - -CP_STACK STRUC - DW ?x4 ; DI, SI, DS, BP - DD ? ; Caller - CP_DestP DW ? ; Page to hold copied image - CP_SourceP DW ? ; Page to Make copy from -CP_STACK ENDS - - PUBLIC COPY_PAGE - -COPY_PAGE PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - MOV BP, SP ; Set up Stack Frame - CLD ; Block Xfer Forwards - - ; Make sure Page #'s are valid - - MOV AX, [BP].CP_SourceP ; Get Source Page # - CMP AX, LAST_PAGE ; is it > Max Page #? - JAE @CP_Exit ; if so, abort - - MOV BX, [BP].CP_DestP ; Get Destination Page # - CMP BX, LAST_PAGE ; is it > Max Page #? - JAE @CP_Exit ; if so, abort - - CMP AX, BX ; Pages #'s the same? - JE @CP_Exit ; if so, abort - - ; Setup DS:SI and ES:DI to Video Pages - - SHL BX, 1 ; Scale index to Word - MOV DI, PAGE_ADDR[BX] ; Offset to Dest Page - - MOV BX, AX ; Index to Source page - SHL BX, 1 ; Scale index to Word - MOV SI, PAGE_ADDR[BX] ; Offset to Source Page - - MOV CX, PAGE_SIZE ; Get size of Page - MOV AX, CURRENT_SEGMENT ; Get Video Mem Segment - MOV ES, AX ; ES:DI -> Dest Page - MOV DS, AX ; DS:SI -> Source Page - - ; Setup VGA registers for Mem to Mem copy - - OUT_16 GC_Index, LATCHES_ON ; Data from Latches = on - OUT_16 SC_Index, ALL_PLANES_ON ; Copy all Planes - - ; Note.. Do *NOT* use MOVSW or MOVSD - they will - ; Screw with the latches which are 8 bits x 4 - - REP MOVSB ; Copy entire Page! - - ; Reset VGA for normal memory access - - OUT_16 GC_Index, LATCHES_OFF ; Data from Latches = off - -@CP_Exit: - POPx DI, SI, DS, BP ; Restore Saved Registers - RET 4 ; Exit and Clean up Stack - -COPY_PAGE ENDP - - -;========================================================================== -;COPY_BITMAP (SourcePage%, X1%, Y1%, X2%, Y2%, DestPage%, DestX1%, DestY1%) -;========================================================================== -; -; Copies a Bitmap Image from one Display Page to Another -; This Routine is Limited to copying Images with the same -; Plane Alignment. To Work: (X1 MOD 4) must = (DestX1 MOD 4) -; Copying an Image to the Same Page is supported, but results -; may be defined when the when the rectangular areas -; (X1, Y1) - (X2, Y2) and (DestX1, DestY1) - -; (DestX1+(X2-X1), DestY1+(Y2-Y1)) overlap... -; No Paramter checking to done to insure that -; X2 >= X1 and Y2 >= Y1. Be Careful... -; -; ENTRY: SourcePage = Display Page # with Source Image -; X1 = Upper Left Xpos of Source Image -; Y1 = Upper Left Ypos of Source Image -; X2 = Lower Right Xpos of Source Image -; Y2 = Lower Right Ypos of Source Image -; DestPage = Display Page # to copy Image to -; DestX1 = Xpos to Copy UL Corner of Image to -; DestY1 = Ypos to Copy UL Corner of Image to -; -; EXIT: AX = Success Flag: 0 = Failure / -1= Success -; - -CB_STACK STRUC - CB_Height DW ? ; Height of Image in Lines - CB_Width DW ? ; Width of Image in "bands" - DW ?x4 ; DI, SI, DS, BP - DD ? ; Caller - CB_DestY1 DW ? ; Destination Ypos - CB_DestX1 DW ? ; Destination Xpos - CB_DestP DW ? ; Page to Copy Bitmap To - CB_Y2 DW ? ; LR Ypos of Image - CB_X2 DW ? ; LR Xpos of Image - CB_Y1 DW ? ; UL Ypos of Image - CB_X1 DW ? ; UL Xpos of Image - CB_SourceP DW ? ; Page containing Source Bitmap -CB_STACK ENDS - - PUBLIC COPY_BITMAP - -COPY_BITMAP PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - SUB SP, 4 ; Allocate WorkSpace on Stack - MOV BP, SP ; Set up Stack Frame - - ; Prep Registers (and keep jumps short!) - - MOV ES, CURRENT_SEGMENT ; ES -> VGA Ram - CLD ; Block Xfer Forwards - - ; Make sure Parameters are valid - - MOV BX, [BP].CB_SourceP ; Get Source Page # - CMP BX, LAST_PAGE ; is it > Max Page #? - JAE @CB_Abort ; if so, abort - - MOV CX, [BP].CB_DestP ; Get Destination Page # - CMP CX, LAST_PAGE ; is it > Max Page #? - JAE @CB_Abort ; if so, abort - - MOV AX, [BP].CB_X1 ; Get Source X1 - XOR AX, [BP].CB_DestX1 ; Compare Bits 0-1 - AND AX, PLANE_BITS ; Check Plane Bits - JNZ @CB_Abort ; They should cancel out - - ; Setup for Copy processing - - OUT_8 SC_INDEX, MAP_MASK ; Set up for Plane Select - OUT_16 GC_Index, LATCHES_ON ; Data from Latches = on - - ; Compute Info About Images, Setup ES:SI & ES:DI - - MOV AX, [BP].CB_Y2 ; Height of Bitmap in lines - SUB AX, [BP].CB_Y1 ; is Y2 - Y1 + 1 - INC AX ; (add 1 since were not 0 based) - MOV [BP].CB_Height, AX ; Save on Stack for later use - - MOV AX, [BP].CB_X2 ; Get # of "Bands" of 4 Pixels - MOV DX, [BP].CB_X1 ; the Bitmap Occupies as X2-X1 - SHR AX, 2 ; Get X2 Band (X2 / 4) - SHR DX, 2 ; Get X1 Band (X1 / 4) - SUB AX, DX ; AX = # of Bands - 1 - INC AX ; AX = # of Bands - MOV [BP].CB_Width, AX ; Save on Stack for later use - - SHL BX, 1 ; Scale Source Page to Word - MOV SI, PAGE_ADDR[BX] ; SI = Offset of Source Page - MOV AX, [BP].CB_Y1 ; Get Source Y1 Line - MUL SCREEN_WIDTH ; AX = Offset to Line Y1 - ADD SI, AX ; SI = Offset to Line Y1 - MOV AX, [BP].CB_X1 ; Get Source X1 - SHR AX, 2 ; X1 / 4 = Byte offset - ADD SI, AX ; SI = Byte Offset to (X1,Y1) - - MOV BX, CX ; Dest Page Index to BX - SHL BX, 1 ; Scale Source Page to Word - MOV DI, PAGE_ADDR[BX] ; DI = Offset of Dest Page - MOV AX, [BP].CB_DestY1 ; Get Dest Y1 Line - MUL SCREEN_WIDTH ; AX = Offset to Line Y1 - ADD DI, AX ; DI = Offset to Line Y1 - MOV AX, [BP].CB_DestX1 ; Get Dest X1 - SHR AX, 2 ; X1 / 4 = Byte offset - ADD DI, AX ; DI = Byte Offset to (D-X1,D-Y1) - - MOV CX, [BP].CB_Width ; CX = Width of Image (Bands) - DEC CX ; CX = 1? - JE @CB_Only_One_Band ; 0 Means Image Width of 1 Band - - MOV BX, [BP].CB_X1 ; Get Source X1 - AND BX, PLANE_BITS ; Aligned? (bits 0-1 = 00?) - JZ @CB_Check_Right ; if so, check right alignment - JNZ @CB_Left_Band ; not aligned? well.. - -@CB_Abort: - CLR AX ; Return False (Failure) - JMP @CB_Exit ; and Finish Up - - ; Copy when Left & Right Clip Masks overlap... - -@CB_Only_One_Band: - MOV BX, [BP].CB_X1 ; Get Left Clip Mask - AND BX, PLANE_BITS ; Mask out Row # - MOV AL, Left_Clip_Mask[BX] ; Get Left Edge Mask - MOV BX, [BP].CB_X2 ; Get Right Clip Mask - AND BX, PLANE_BITS ; Mask out Row # - AND AL, Right_Clip_Mask[BX] ; Get Right Edge Mask byte - - OUT_8 SC_Data, AL ; Clip For Left & Right Masks - - MOV CX, [BP].CB_Height ; CX = # of Lines to Copy - MOV DX, SCREEN_WIDTH ; DX = Width of Screen - CLR BX ; BX = Offset into Image - -@CB_One_Loop: - MOV AL, ES:[SI+BX] ; Load Latches - MOV ES:[DI+BX], AL ; Unload Latches - ADD BX, DX ; Advance Offset to Next Line - LOOPjz CX, @CB_One_Done ; Exit Loop if Finished - - MOV AL, ES:[SI+BX] ; Load Latches - MOV ES:[DI+BX], AL ; Unload Latches - ADD BX, DX ; Advance Offset to Next Line - LOOPx CX, @CB_One_Loop ; Loop until Finished - -@CB_One_Done: - JMP @CB_Finish ; Outa Here! - - ; Copy Left Edge of Bitmap - -@CB_Left_Band: - - OUT_8 SC_Data, Left_Clip_Mask[BX] ; Set Left Edge Plane Mask - - MOV CX, [BP].CB_Height ; CX = # of Lines to Copy - MOV DX, SCREEN_WIDTH ; DX = Width of Screen - CLR BX ; BX = Offset into Image - -@CB_Left_Loop: - MOV AL, ES:[SI+BX] ; Load Latches - MOV ES:[DI+BX], AL ; Unload Latches - ADD BX, DX ; Advance Offset to Next Line - LOOPjz CX, @CB_Left_Done ; Exit Loop if Finished - - MOV AL, ES:[SI+BX] ; Load Latches - MOV ES:[DI+BX], AL ; Unload Latches - ADD BX, DX ; Advance Offset to Next Line - LOOPx CX, @CB_Left_Loop ; Loop until Finished - -@CB_Left_Done: - INC DI ; Move Dest Over 1 band - INC SI ; Move Source Over 1 band - DEC [BP].CB_Width ; Band Width-- - - ; Determine if Right Edge of Bitmap needs special copy - -@CB_Check_Right: - MOV BX, [BP].CB_X2 ; Get Source X2 - AND BX, PLANE_BITS ; Aligned? (bits 0-1 = 11?) - CMP BL, 03h ; Plane = 3? - JE @CB_Copy_Middle ; Copy the Middle then! - - ; Copy Right Edge of Bitmap - -@CB_Right_Band: - - OUT_8 SC_Data, Right_Clip_Mask[BX] ; Set Right Edge Plane Mask - - DEC [BP].CB_Width ; Band Width-- - MOV CX, [BP].CB_Height ; CX = # of Lines to Copy - MOV DX, SCREEN_WIDTH ; DX = Width of Screen - MOV BX, [BP].CB_Width ; BX = Offset to Right Edge - -@CB_Right_Loop: - MOV AL, ES:[SI+BX] ; Load Latches - MOV ES:[DI+BX], AL ; Unload Latches - ADD BX, DX ; Advance Offset to Next Line - LOOPjz CX, @CB_Right_Done ; Exit Loop if Finished - - MOV AL, ES:[SI+BX] ; Load Latches - MOV ES:[DI+BX], AL ; Unload Latches - ADD BX, DX ; Advance Offset to Next Line - LOOPx CX, @CB_Right_Loop ; Loop until Finished - -@CB_Right_Done: - - ; Copy the Main Block of the Bitmap - -@CB_Copy_Middle: - - MOV CX, [BP].CB_Width ; Get Width Remaining - JCXZ @CB_Finish ; Exit if Done - - OUT_8 SC_Data, ALL_PLANES ; Copy all Planes - - MOV DX, SCREEN_WIDTH ; Get Width of Screen minus - SUB DX, CX ; Image width (for Adjustment) - MOV AX, [BP].CB_Height ; AX = # of Lines to Copy - MOV BX, CX ; BX = Quick REP reload count - MOV CX, ES ; Move VGA Segment - MOV DS, CX ; Into DS - - ; Actual Copy Loop. REP MOVSB does the work - -@CB_Middle_Copy: - MOV CX, BX ; Recharge Rep Count - REP MOVSB ; Move Bands - LOOPjz AX, @CB_Finish ; Exit Loop if Finished - - ADD SI, DX ; Adjust DS:SI to Next Line - ADD DI, DX ; Adjust ES:DI to Next Line - - MOV CX, BX ; Recharge Rep Count - REP MOVSB ; Move Bands - - ADD SI, DX ; Adjust DS:SI to Next Line - ADD DI, DX ; Adjust ES:DI to Next Line - LOOPx AX, @CB_Middle_Copy ; Copy Lines until Done - -@CB_Finish: - OUT_16 GC_Index, LATCHES_OFF ; Data from Latches = on - -@CB_Exit: - ADD SP, 04 ; Deallocate stack workspace - POPx DI, SI, DS, BP ; Restore Saved Registers - RET 16 ; Exit and Clean up Stack - -COPY_BITMAP ENDP - - END ; End of Code Segment diff --git a/16/modex105/DEMOS/C/MODEX.BI b/16/modex105/DEMOS/C/MODEX.BI deleted file mode 100755 index 6b1d7afe..00000000 --- a/16/modex105/DEMOS/C/MODEX.BI +++ /dev/null @@ -1,63 +0,0 @@ - - ' ===== SCREEN RESOLUTIONS ===== - -CONST Mode320x200 = 0, Mode320x400 = 1 -CONST Mode360x200 = 2, Mode360x400 = 3 -CONST Mode320x240 = 4, Mode320x480 = 5 -CONST Mode360x240 = 6, Mode360x480 = 7 - - ' ===== MODE X SETUP ROUTINES ===== - -DECLARE FUNCTION SET.VGA.MODEX% ALIAS "SET_VGA_MODEX" (BYVAL ModeType%, BYVAL MaxXpos%, BYVAL MaxYpos%, BYVAL Pages%) -DECLARE FUNCTION SET.MODEX% ALIAS "SET_MODEX" (BYVAL Mode%) - - ' ===== BASIC GRAPHICS PRIMITIVES ===== - -DECLARE SUB CLEAR.VGA.SCREEN ALIAS "CLEAR_VGA_SCREEN" (BYVAL ColorNum%) -DECLARE SUB SET.POINT ALIAS "SET_POINT" (BYVAL Xpos%, BYVAL Ypos%, BYVAL ColorNum%) -DECLARE FUNCTION READ.POINT% ALIAS "READ_POINT" (BYVAL Xpos%, BYVAL Ypos%) -DECLARE SUB FILL.BLOCK ALIAS "FILL_BLOCK" (BYVAL Xpos1%, BYVAL Ypos1%, BYVAL Xpos2%, BYVAL Ypos2%, BYVAL ColorNum%) -DECLARE SUB DRAW.LINE ALIAS "DRAW_LINE" (BYVAL Xpos1%, BYVAL Ypos1%, BYVAL Xpos2%, BYVAL Ypos2%, BYVAL ColorNum%) - - ' ===== DAC COLOR REGISTER ROUTINES ===== - -DECLARE SUB SET.DAC.REGISTER ALIAS "SET_DAC_REGISTER" (BYVAL RegNo%, BYVAL Red%, BYVAL Green%, BYVAL Blue%) -DECLARE SUB GET.DAC.REGISTER ALIAS "GET_DAC_REGISTER" (BYVAL RegNo%, Red%, Green%, Blue%) -DECLARE SUB LOAD.DAC.REGISTERS ALIAS "LOAD_DAC_REGISTERS" (SEG PalData AS ANY, BYVAL StartReg%, BYVAL EndReg%, BYVAL VSync%) -DECLARE SUB READ.DAC.REGISTERS ALIAS "READ_DAC_REGISTERS" (SEG PalData AS ANY, BYVAL StartReg%, BYVAL EndReg%) - - - ' ===== PAGE FLIPPING AND SCROLLING ROUTINES ===== - -DECLARE SUB SET.ACTIVE.PAGE ALIAS "SET_ACTIVE_PAGE" (BYVAL PageNo%) -DECLARE FUNCTION GET.ACTIVE.PAGE% ALIAS "GET_ACTIVE_PAGE" -DECLARE SUB SET.DISPLAY.PAGE ALIAS "SET_DISPLAY_PAGE" (BYVAL PageNo%) -DECLARE FUNCTION GET.DISPLAY.PAGE% ALIAS "GET_DISPLAY_PAGE" -DECLARE SUB SET.WINDOW ALIAS "SET_WINDOW" (BYVAL DisplayPage%, BYVAL XOffset%, BYVAL YOffset%) -DECLARE FUNCTION GET.X.OFFSET% ALIAS "GET_X_OFFSET" () -DECLARE FUNCTION GET.Y.OFFSET% ALIAS "GET_Y_OFFSET" () -DECLARE SUB SYNC.DISPLAY ALIAS "SYNC_DISPLAY" - - ' ===== TEXT DISPLAY ROUTINES ===== - -DECLARE SUB GPRINTC (BYVAL CharacterNum%, BYVAL Xpos%, BYVAL Ypos%, BYVAL ColorF%, BYVAL ColorB%) -DECLARE SUB TGPRINTC (BYVAL CharacterNum%, BYVAL Xpos%, BYVAL Ypos%, BYVAL ColorF%) -DECLARE SUB PRINT.STR ALIAS "PRINT_STR" (BYVAL StrSeg%, BYVAL StrOfs%, BYVAL MaxLen%, BYVAL Xpos%, BYVAL Ypos%, BYVAL ColorF%, BYVAL ColorB%) -DECLARE SUB TPRINT.STR ALIAS "TPRINT_STR" (BYVAL StrSeg%, BYVAL StrOfs%, BYVAL MaxLen%, BYVAL Xpos%, BYVAL Ypos%, BYVAL ColorF%) -DECLARE SUB SET.DISPLAY.FONT ALIAS "SET_DISPLAY_FONT" (SEG FontData AS ANY, BYVAL FontNumber%) - - ' ===== BITMAP (SPRITE) DISPLAY ROUTINES ===== - -DECLARE SUB DRAW.BITMAP ALIAS "DRAW_BITMAP" (SEG Image AS ANY, BYVAL Xpos%, BYVAL Ypos%, BYVAL xWidth%, BYVAL Height%) -DECLARE SUB TDRAW.BITMAP ALIAS "TDRAW_BITMAP" (SEG Image AS ANY, BYVAL Xpos%, BYVAL Ypos%, BYVAL xWidth%, BYVAL Height%) - - ' ==== VIDEO MEMORY to VIDEO MEMORY COPY ROUTINES ===== - -DECLARE SUB COPY.PAGE ALIAS "COPY_PAGE" (BYVAL SourcePage%, BYVAL DestPage%) -DECLARE SUB COPY.BITMAP ALIAS "COPY_BITMAP" (BYVAL SourcePage%, BYVAL X1%, BYVAL Y1%, BYVAL X2%, BYVAL Y2%, BYVAL DestPage%, BYVAL DestX1%, BYVAL DestY1%) - - - - - - diff --git a/16/modex105/DEMOS/C/MODEX.H b/16/modex105/DEMOS/C/MODEX.H deleted file mode 100755 index 7de25a63..00000000 --- a/16/modex105/DEMOS/C/MODEX.H +++ /dev/null @@ -1,76 +0,0 @@ - -#ifndef __MODEX_H -#define __MODEX_H - - /* ===== SCREEN RESOLUTIONS ===== */ - -#define Mode_320x200 0 -#define Mode_320x400 1 -#define Mode_360x200 2 -#define Mode_360x400 3 -#define Mode_320x240 4 -#define Mode_320x480 5 -#define Mode_360x240 6 -#define Mode_360x480 7 - - /* ===== MODE X SETUP ROUTINES ===== */ - -int far pascal set_vga_modex (int Mode, int MaxXpos, int MaxYpos, int Pages); -int far pascal set_modex (int Mode); - - /* ===== BASIC GRAPHICS PRIMITIVES ===== */ - -void far pascal clear_vga_screen (int Color); -void far pascal set_point (int Xpos, int Ypos, int Color); -int far pascal read_point (int Xpos, int Ypos); -void far pascal fill_block (int Xpos1, int Ypos1, int Xpos2, int Ypos2, - int Color); -void far pascal draw_line (int Xpos1, int Ypos1, int Xpos2, int Ypos2, - int Color); - - /* ===== DAC COLOR REGISTER ROUTINES ===== */ - -void far pascal set_dac_register (int RegNo, int Red, int Green, int Blue); -void far pascal get_dac_register (int RegNo, int* Red, int* Green, int* Blue); -void far pascal load_dac_registers (char far *PalData, int StartReg, - int EndReg, int VSync); -void far pascal readd_dac_registers (char far *PalData, int StartReg, - int EndReg); - - /* ===== PAGE FLIPPING AND SCROLLING ROUTINES ===== */ - -void far pascal set_active_page (int PageNo); -int far pascal get_active_page (void); -void far pascal set_display_page (int PageNo); -int far pascal get_display_page (void); -void far pascal set_window (int DisplayPage, int XOffset, int YOffset); -int far pascal get_x_offset (void); -int far pascal get_y_offset (void); -void far pascal sync_display (void); - - /* ===== TEXT DISPLAY ROUTINES ===== */ - -void far pascal gprintc (int CharNum, int Xpos, int Ypos, int ColorF, - int ColorB); -void far pascal tgprintc (int CharNum, int Xpos, int Ypos, int ColorF); -void far pascal print_str (char far *Text, int MaxLen, int Xpos, int Ypos, - int ColorF, int ColorB); -void far pascal tprint_str (char far *Text, int MaxLen, int Xpos, int Ypos, - int ColorF); -void far pascal set_display_font (char far *FontData, int FontNumber); - - /* ===== BITMAP (SPRITE) DISPLAY ROUTINES ===== */ - -void far pascal draw_bitmap (char far *Image, int Xpos, int Ypos, - int Width, int Height); -void far pascal tdraw_bitmap (char far *Image, int Xpos, int Ypos, - int Width, int Height); - - /* ==== VIDEO MEMORY to VIDEO MEMORY COPY ROUTINES ===== */ - -void far pascal copy_page (int SourcePage, int DestPage); -void far pascal copy_bitmap (int SourcePage, int X1, int Y1, int X2, int Y2, - int DestPage, int DestX1, int DestY1); - - -#endif diff --git a/16/modex105/DEMOS/C/UTLS-ASM.BAT b/16/modex105/DEMOS/C/UTLS-ASM.BAT deleted file mode 100755 index d996978f..00000000 --- a/16/modex105/DEMOS/C/UTLS-ASM.BAT +++ /dev/null @@ -1 +0,0 @@ -MASM c_utils, c_utils, c_utils, nul; \ No newline at end of file diff --git a/16/modex105/DEMOS/C/X-DEMO.C b/16/modex105/DEMOS/C/X-DEMO.C deleted file mode 100755 index 2d0621ee..00000000 --- a/16/modex105/DEMOS/C/X-DEMO.C +++ /dev/null @@ -1,780 +0,0 @@ -/* X-DEMO.C - a Mode "X" Demo */ -/* By Matt Pritchard, 14 Apr, 1993 */ - -#include -#include - -#include "modex.h" -#include "c_utils.h" - -#define MAX_SHAPES 32 -#define MAX_SPRITES 64 - - /* routines in this file */ - -void demo_res (int, int, int); -int get_key (void); -void error_out (char*); -void load_shapes (void); -int int_sqrt (int, int); -void page_demo (void); - - /* Structures for Sprites */ - -struct Shape -{ - unsigned char Image[512]; - int X_Width; - int Y_Width; -} Img [MAX_SHAPES]; - -struct Sprite -{ - int X_pos; - int Y_pos; - int X_Dir; - int Y_Dir; - int Shape; - int Last_X [2]; - int Last_Y [2]; -} Obj [MAX_SPRITES]; - - - /* MAIN */ - - -int main(int argc, char *argv[]) -{ - - /* if (argc > 0) - { - while (argc > 0) - { - dos_print ("Unknown Argument: "); - dos_print (makefp argv[argc]); - argc--; - } - return (0); - - } - */ - - init_random (); - - load_shapes (); - - demo_res ( Mode_320x200, 320, 200 ); - demo_res ( Mode_320x400, 320, 400 ); - - demo_res ( Mode_360x200, 360, 200 ); - demo_res ( Mode_360x400, 360, 400 ); - - demo_res ( Mode_320x240, 320, 240 ); - demo_res ( Mode_320x480, 320, 480 ); - - demo_res ( Mode_360x240, 360, 240 ); - demo_res ( Mode_360x480, 360, 480 ); - - page_demo (); - - set_video_mode (3); - dos_print ("This Mode X Demo is Finished"); - return (0); - -} - - - /* Demonstrate a given resolution */ - - -void demo_res (int Screen_Mode, int X_max, int Y_max) -{ - -char *Error1 = "Failure while calling SET_MODEX"; -char *Error2 = "Failure during READ_PIXEL test"; - -char *Abort_Msg = "Demo aborted by User"; - -char *Demo_Msg = " This is a MODE X demo "; -char *Scrn_Msg = "Screen Resolution is by "; -char *Cont_Msg = "Press to Continue"; - -char *Line_Msg = "LINE TEST"; -char *Fill_Msg = "FILL TEST"; -char *Pixel_Msg = "PIXEL TEST"; - -char Text[10]; - -int x1, y1, x2, y2 = 0; -int x, y, z = 0; -int X_Center, gap = 0; - - - if (set_modex (Screen_Mode) == 0) - { - error_out (Error1); - } - - X_Center = X_max / 2; - - x1 = 10; - y1 = 10; - x2 = X_max - 1; - y2 = Y_max - 1; - - for (z = 0; z <= 3; z++) - { - y = 31 - z -z; - draw_line (x1+z, y1+z, x2-z, y1+z, y); - draw_line (x1+z, y1+z, x1+z, y2-z, y); - draw_line (x1+z, y2-z, x2-z, y2-z, y); - draw_line (x2-z, y1+z, x2-z, y2-z, y); - } - - for (x = 0; x < (X_max / 10); x++) - { - tgprintc (48 + ((x+1) % 10), x*10+1, 1, 9 + ((x/8) % 7) ); - draw_line (x*10+9, 0, x*10+9, 3, c_bWHITE); - } - - for (y = 0; y < (Y_max / 10); y++) - { - tgprintc (48 + ((y+1) % 10), 1, y*10+1, 9 + ((y/10) % 7) ); - draw_line (0, y*10+9, 3, y*10+9, c_bWHITE); - } - - for (x = 0; x <= 63; x++) - { - z = 15 + (x * 3 / 4); - set_dac_register (64+x, z, z, z); - set_dac_register (128+x, 0, z, z); - - draw_line (103-x, 60, 40+x, 123, 64+x); - draw_line (40, 60+x, 103, 123-x, 128+x); - - } - - tprint_str (Line_Msg, 9, 37, 130, c_BLUE); - - y = 60; - gap = 0; - for (x = 0; x <= 9; x++) - { - fill_block (120, y, 120+x, y+gap, 64+x); - fill_block (140 - (15-x), y, 150+x, y+gap, 230+x); - fill_block (170 - (15-x), y, 170, y+gap, 128+x); - y = y + gap + 2; - gap++; - } - - tprint_str (Fill_Msg, 9, 110, 46, c_GREEN); - - for (x = 190; x <= 250; x+=2) - { - for (y = 60; y <= 122; y+=2) - { - z = (x+x+y+y) & 0xff; - set_point (x, y, z); - } - } - - tprint_str (Pixel_Msg, 10, 182, 130, c_RED); - - for (x = 190; x <= 250; x+=2) - { - for (y = 60; y <= 122; y+=2) - { - z = (x+x+y+y) & 0xff; - if (read_point(x, y) != z) - { - error_out (Error2); - } - } - } - - print_str (Demo_Msg, 23, X_Center - 92, 20, c_bRED, c_BLUE); - - x = X_Center - 124; - print_str (Scrn_Msg, 28, x, 30, c_bGREEN, c_BLACK); - - sprintf (Text, "%3d", X_max); - print_str (Text, 3, x+168, 30, c_bPURPLE, c_BLACK); - - sprintf (Text, "%3d", Y_max); - print_str (Text, 3, x + 224, 30, c_bWHITE, c_BLACK); - - for (x = 0; x <= 15; x++) - { - set_dac_register (230+x, 63-x*4, 0, 15+x*3); - draw_line (30+x, Y_max-6-x, X_max-20-x, Y_max-6-x, 230+x); - } - - tprint_str (Cont_Msg, 27, X_Center - 103, Y_max-18, c_YELLOW); - - if (get_key () == Ky_ESC) - { - error_out (Abort_Msg); - } - - return ; - -} - - - /* Wait for a Keystroke */ - - -int get_key(void) -{ - -int c = 0; - - while (c == 0) - { - c = scan_keyboard (); - } - - return (c); - -} - - - /* Error Handling Routine */ - - -void error_out (char * text) -{ - - set_video_mode (3); - dos_print (text); - exit (EXIT_SUCCESS); - -} - - - /* Routine to generate random sprites */ - - -void load_shapes () -{ - -unsigned char Grid[33][33]; - -char *Error1 = "Bad Shape Selected Error"; - -int Shape; -int x, y, z; -int Style, Color; -int X_Width, Y_Width, Center, S_Width; -int Hollow_X, Hollow_Y; - - for (Shape = 0; Shape < MAX_SHAPES; Shape++) - { - for (y = 0; y <= 32; y++) - { - for (x = 0; x <= 32; x++) - { - Grid[x][y] = c_BLACK; - } - } - - Style = random_int (6); - Color = 1 + random_int (15); - - switch (Style) - - { - /* SOLID BOXES */ - - case 0: - - { - do - { - X_Width = 3 + random_int(30); - Y_Width = 3 + random_int(30); - - } while ( (X_Width * Y_Width) >= 512); - - for (x = 1; x <= X_Width; x++) - { - for (y = 1; y <= Y_Width; y++) - { - Grid[x][y] = Color; - } - } - - break; - - } - /* HOLLOW BOXES */ - - case 1: - - { - do { - X_Width = 6 + random_int(27); - Y_Width = 6 + random_int(27); - } while ( (X_Width * Y_Width) >= 512); - - for (y = 1; y <= Y_Width; y++) - { - for (x = 1; x <= X_Width; x++) - { - Grid[x][y] = Color; - } - } - - Hollow_X = 1 + random_int ((X_Width / 2) -1); - Hollow_Y = 1 + random_int ((Y_Width / 2) -1); - - for (y = Hollow_Y+1; y <= Y_Width-Hollow_Y; y++) - { - for (x = Hollow_X+1; x <= X_Width-Hollow_X; x++) - { - Grid[x][y] = c_BLACK; - } - } - - break; - - } - - /* SOLID DIAMOND */ - - case 2: - - { - - X_Width = 3 + 2 * random_int(10); - Y_Width = X_Width; - Center = X_Width / 2; - - for (y = 0; y <= Center; y++) - { - for (x = 0; x <= y; x++) - { - Grid [Center-x+1][y+1] = Color; - Grid [Center+x+1][y+1] = Color; - Grid [Center-x+1][Y_Width-y] = Color; - Grid [Center+x+1][Y_Width-y] = Color; - } - } - - break; - - } - - /* HOLLOW DIAMOND */ - - case 3: - - { - - X_Width = 3 + 2 * random_int(10); - Y_Width = X_Width; - Center = X_Width / 2; - S_Width = random_int (Center); - - for (y = 0; y <= Center; y++) - { - for (x = 0; x <= y; x++) - { - if ( x+(Center-y) >= S_Width ) - { - Grid [Center-x+1][y+1] = Color; - Grid [Center+x+1][y+1] = Color; - Grid [Center-x+1][Y_Width-y] = Color; - Grid [Center+x+1][Y_Width-y] = Color; - } - } - } - - break; - - } - - /* BALL */ - - case 4: - - { - - X_Width = 7 + 2 * random_int (8); - Y_Width = X_Width; - Center = 1 + X_Width / 2; - - for (y = 1; y <= Y_Width; y++) - { - for (x = 1; x <= X_Width; x++) - { - z = int_sqrt(Center-x, Center-y); - if (z < Center) - { - Grid[x][y] = 150 + Color * 2 + z * 3; - } - } - } - - break; - } - - /* HOLLOW BALLS */ - - case 5: - - { - X_Width = 7 + 2 * random_int (8); - Y_Width = X_Width; - Center = 1 + X_Width / 2; - S_Width = random_int (X_Width); - - for (y = 1; y <= Y_Width; y++) - { - for (x = 1; x <= X_Width; x++) - { - z = int_sqrt(Center-x, Center-y); - if ( (z < Center) && (z >= S_Width) ) - { - Grid[x][y] = 150 + Color * 2 + z * 3; - } - } - } - - - break; - } - - default: - - { - error_out (Error1); - break; - - } - - } - - z = 0; - for (y = 1; y <= Y_Width; y++) - { - for (x = 1; x <= X_Width; x++) - { - Img[Shape].Image[z] = Grid[x][y]; - z++; - } - } - - Img[Shape].X_Width = X_Width; - Img[Shape].Y_Width = Y_Width; - - } - - return; -} - - - /* Quickie Psuedo Integer Square Root Routine */ - - -int int_sqrt ( int x, int y ) -{ - -int Sqr_Table[12] = {1, 4, 9, 6, 25, 36, 49, 64, 81, 100, 121, 144}; - -int r, d; - - d = (x * x) + (y * y); - r = 0; - - while ( d >= Sqr_Table[r] ) - { - r++; - } - - return (r); - -} - - - /* The Bit Sprite Demo */ - - -void page_demo () -{ - -char *Error1 = "Failure during SET_VGA_MODEX (0, 360, 240, 3) call"; - -int Last_Objects[2], Visible_Objects; - -int Screen_X = 384; -int Screen_Y = 672; - -int x, y, z; -int c, dc; -int x1, y1, x2, y2; - -int Sprite_X, Sprite_Y; -int Current_Page; -int New_X, New_Y; - -int View_X, View_Y, View_Max, View_Cnt, View_XD, View_YD; -int Set_Color, Prev_Color, S_Dir, P_Dir; - -int Demo_Running = True; -int redo, code; - - if (set_vga_modex(Mode_320x200, Screen_X, Screen_Y, 3) == 0) - { - error_out (Error1); - } - - set_active_page (0); - clear_vga_screen (c_BLACK); - - print_str ("This is a Test of the Following Functions:", 99, 10, 9, c_bWHITE, c_BLACK); - - draw_line (10, 18, 350, 18, c_YELLOW); - print_str ("SET_ACTIVE_PAGE", 99, 10, 20, c_bBLUE, c_BLACK); - print_str ("SET_DISPLAY_PAGE", 99, 10, 30, c_GREEN, c_BLACK); - print_str ("SET_DAC_REGISTER", 99, 10, 40, c_RED, c_BLACK); - print_str ("CLEAR_VGA_SCREEN", 99, 10, 50, c_CYAN, c_BLACK); - - print_str ("TDRAW_BITMAP", 99, 10, 60, c_PURPLE, c_BLACK); - print_str ("COPY_PAGE", 99, 10, 70, c_GREEN, c_BLACK); - print_str ("COPY_BITMAP", 99, 10, 80, c_CYAN, c_BLACK); - - print_str ("GPRINTC", 99, 10, 90, c_BLUE, c_BLACK); - print_str ("TGPRINTC", 99, 10, 100, c_GREEN, c_BLACK); - print_str ("SET_WINDOW", 99, 10, 110, c_RED, c_BLACK); - - print_str ("VIRTUAL SCREEN SIZES", 20, 190, 20, c_bBLUE, c_BLACK); - print_str (" SMOOTH SCROLLING", 20, 190, 30, c_GREEN, c_BLACK); - print_str (" SPRITE ANIMATION", 20, 190, 40, c_CYAN, c_BLACK); - print_str (" PAGE FLIPPING", 20, 190, 50, c_RED, c_BLACK); - print_str (" COLOR CYCLING", 20, 190, 60, c_PURPLE, c_BLACK); - - for (x = 0; x <=60; x++) - { - set_dac_register (50 + x, 3 + x, 0, 60 - x); - set_dac_register (150 + x, 3 + x, 0, 60 - x); - } - - c = 0; - dc = 1; - for (x = 0; x <= (Screen_X / 2); x++) - { - draw_line (Screen_X / 2 - 1, Screen_Y / 4, x, Screen_Y - 1, c + 50); - draw_line (Screen_X / 2, Screen_Y / 4, Screen_X - x - 1, Screen_Y - 1, c + 50); - c+= dc; - if ((c == 0) || (c == 60) ) { dc = -dc;} - } - - tprint_str ("Press to Continue", 99, 72, 190, c_bWHITE); - tprint_str ("< > = Faster < > = Slower", 99, 72, 204, c_bGREEN); - tprint_str ("< > = Fewer Shapes < > = More Shapes", 99, 32, 218, c_bCYAN); - - tgprintc (43, 80, 204, c_YELLOW); - tgprintc (45, 200, 204, c_YELLOW); - - tgprintc (25, 40, 218, c_YELLOW); - tgprintc (24, 200, 218, c_YELLOW); - - copy_page (0, 1); - copy_page (0, 2); - - for (x = 0; x < MAX_SPRITES; x++) - { - do { - Obj[x].X_Dir = random_int(7) - 3; - Obj[x].Y_Dir = random_int(7) - 3; - } while ( (Obj[x].X_Dir == 0) && (Obj[x].Y_Dir == 0) ); - - Obj[x].Shape = x % MAX_SHAPES; - - Sprite_X = Img[Obj[x].Shape].X_Width; - Sprite_Y = Img[Obj[x].Shape].Y_Width; - - Obj[x].X_pos = 1 + random_int(Screen_X - Sprite_X - 2); - Obj[x].Y_pos = 1 + random_int(Screen_Y - Sprite_Y - 2); - - Obj[x].Last_X[0] = Obj[x].X_pos; - Obj[x].Last_X[1] = Obj[x].X_pos; - Obj[x].Last_Y[0] = Obj[x].Y_pos; - Obj[x].Last_Y[1] = Obj[x].Y_pos; - - } - - Current_Page = 0; - - View_X = 0; - View_Y = 0; - View_Max = 3; - View_Cnt = 0; - View_XD = 1; - View_YD = 1; - - Set_Color = 3; - S_Dir = 1; - Prev_Color = 0; - P_Dir = 1; - - Visible_Objects = MAX_SPRITES / 2; - Last_Objects[0] = 0; - Last_Objects[1] = 0; - - while (Demo_Running) - { - - set_active_page (Current_Page); - - /* Erase Old Images */ - - for (x = 0; x <= Last_Objects[Current_Page]; x++) - { - z = 2; - y = Obj[x].Shape; - x1 = Obj[x].Last_X[Current_Page]; - y1 = Obj[x].Last_Y[Current_Page]; - x2 = x1 + Img[y].X_Width -1; - y2 = y1 + Img[y].Y_Width -1; - - x1 = x1 & 0xfffc; - x2 = x2 | 0x0003; - - copy_bitmap (z, x1, y1, x2, y2, Current_Page, x1, y1); - } - - /* Draw new images */ - - for (x = 0; x <= Visible_Objects; x++) - { - Sprite_X = Img[Obj[x].Shape].X_Width; - Sprite_Y = Img[Obj[x].Shape].Y_Width; - - /* Move Sprite */ - - do - { - redo = False; - New_X = Obj[x].X_pos + Obj[x].X_Dir; - - if (( New_X < 0 ) || (New_X + Sprite_X > Screen_X) ) - { - Obj[x].X_Dir = -Obj[x].X_Dir; - if (random_int(20) == 1) - { - do - { - Obj[x].X_Dir = random_int(7) - 3; - Obj[x].Y_Dir = random_int(7) - 3; - } while ( (Obj[x].X_Dir == 0) && (Obj[x].Y_Dir == 0) ); - redo = True; - } - } - } while (redo); - Obj[x].X_pos = Obj[x].X_pos + Obj[x].X_Dir; - - - do - { - redo = False; - New_Y = Obj[x].Y_pos + Obj[x].Y_Dir; - - if ( (New_Y < 0) || (New_Y + Sprite_Y > Screen_Y) ) - { - Obj[x].Y_Dir = -Obj[x].Y_Dir; - if (random_int(20) == 1) - { - do - { - Obj[x].X_Dir = random_int(7) - 3; - Obj[x].Y_Dir = random_int(7) - 3; - } while ( (Obj[x].X_Dir == 0) && (Obj[x].Y_Dir == 0) ); - redo = True; - } - } - } while (redo); - - Obj[x].Y_pos = Obj[x].Y_pos + Obj[x].Y_Dir; - - /* Draw Sprite */ - - tdraw_bitmap ((char far*) &Img[Obj[x].Shape], Obj[x].X_pos, Obj[x].Y_pos, Sprite_X, Sprite_Y); - - Obj[x].Last_X[Current_Page] = Obj[x].X_pos; - Obj[x].Last_Y[Current_Page] = Obj[x].Y_pos; - - } - - Last_Objects[Current_Page] = Visible_Objects; - - - /* Pan Screen Back & Forth */ - - View_Cnt++; - if (View_Cnt >= View_Max) - { - View_X+= View_XD; - if ( (View_X == 0) || (View_X == 39) ) {View_XD = -View_XD;} - if (View_XD < 0) - { - View_Y+= View_YD; - if ( (View_Y == 0) || (View_Y == 39) ) {View_YD = -View_YD;} - } - - set_window (Current_Page, View_X, View_Y); - - View_Cnt = 0; - } - else - { - set_display_page (Current_Page); - } - - /* Cycle Colors */ - - set_dac_register (50 + Prev_Color, 3 + Prev_Color, 0, 60 - Prev_Color); - set_dac_register (50 + Set_Color, Set_Color, 10, 63 - Set_Color); - - set_dac_register (150 + Prev_Color, 3 + Prev_Color, 0, 60 - Prev_Color); - set_dac_register (150 + Set_Color, 63, 63, Set_Color); - - Set_Color+= S_Dir; - if ( (Set_Color == 60) || (Set_Color == 0) ) {S_Dir = -S_Dir;} - - Prev_Color+= P_Dir; - if ( (Prev_Color == 60) || (Prev_Color == 0) ) {P_Dir = -P_Dir;} - - /* Check for Keystroke */ - - Current_Page = Current_Page ^ 0x01; - - code = scan_keyboard (); - - if (code == Ky_ESC) {Demo_Running = False;} - - if (code == Ky_Plus) - { - if (View_Max < 12) {View_Max++;} - } - - if (code == Ky_Minus) - { - if (View_Max > 1) {View_Max--;} - if (View_Cnt >= View_Max) {View_Cnt = 0;} - } - - if (code == Ky_Up) - { - if (Visible_Objects < MAX_SPRITES-1) {Visible_Objects++;} - } - - if (code == Ky_Down) - { - if (Visible_Objects > 0) {Visible_Objects--;} - } - - } - -} diff --git a/16/modex105/DEMOS/C/X-DEMO.EXE b/16/modex105/DEMOS/C/X-DEMO.EXE deleted file mode 100755 index 7742d145c591d471d2e9b79e0fe99083a3d669f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41090 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 JvY09JKLIz`z5M_H diff --git a/16/modex105/DEMOS/C/X-DEMO.PRJ b/16/modex105/DEMOS/C/X-DEMO.PRJ deleted file mode 100755 index 7bc4a069233a535f9a2bbb6b21436c8e018409e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5188 zcmeI0*;89}6vxjm1PDtlt<^%>!cUD#+aW-ZrMO%|5-?6SlVBN3MV5fnLNGwx0b7@j zOQ+RGU)-%bT6KJIdGW=zRL7;I_0fO8U9`2=^SuFVm3SeEWybNB$tUNWdzN3$-GAYc zSZ7o^WFQvZ7U>$6O?}%V(oAC6%GH8@vTYPJeL@BjbdX7ONRtn1oYX8wG`^pQtsiLo zP~%5TL7!`$UugW2nL$UH4RnlYpegLg6-ciFuK}+EZvgKA?*c1P@_b+wLtFq{2z9lH_plI3kwCxA5Z3@} z8DbrzVn#*@R0;KB;1a+BTnb#q!RpxMEN#@%+-hKP3qx!LZUQ=iE}$ET06jo2a0`R_ zfdL>2+ij4BAdNuU0qJ%~cR;!mxC^)&xQ9V|fP0~i0%O29a38P}*u|jxAw2**2=yUg zH`IrLM}WtGy}&-;ao`ESSir~xvVd&B1e6IUcQEx~731WrZ)@}iJ$9ed(dPC!JS|RF z>WLSTq5Lm%@VFZn5uF~_3O+omY($kJlWf(T)5bz&MFmln7)wuyUz}adTi45sMqzlQrF`uU5~4EJ+9I9P;@;S_`qH2VPE>g(8Ix4v)Jkg1gKfNRj4YT&y>aY+Ee@Xm~-hX6OA?pU4aGc#NJqBZ~<-$ zb}1X!C@o%>x3tn$w_aL&{?KN7Kw1Jpzc&z;76&WdP;)6}XJcXgj%Z)E++gjJ3$Ac( z91p2tG^{5#9a(J&Tc`fnkC%{Q=L$f@t^Xw(A_^6jSWjrUuUc%*4HtR zAeGx2Nb6&+CEW=V%=_Oqf2QId{r^a*1JyLa@0jty{nQ3DM|(@y?Fm`^jn|Ra?{u}c zooSf~Sj0~*<&X($BQxX7T3UXslA|qN>rcz9|6+bK`LQjVmvDHkg--Iro4ShV<7U>_ z)LQ0rdHq%g@e6Fc)|_QACFXpwRAj`0&bTC3YXR)CM3z{s#GLs|DqED(^;?z6BtB9J zC^03fY*Qjimolu>D^jVUT#?U(%)B!64KH;apeJc3jZhD%s+sNiJg4{ge;cWx=wM-{ z#w?B58ciB=$kXvCKiHP;O# zklbpWT?S}t_cggaF6-Yngu+g@e;#|guf^k;&+c?Jh32ty9=;A@1OD9HZmXq>C=YF? X5-O&3w3gOTAr*0V3fVd{aHaSIrzdwi diff --git a/16/modex105/DEMOS/C/x.exe b/16/modex105/DEMOS/C/x.exe deleted file mode 100755 index 7742d145c591d471d2e9b79e0fe99083a3d669f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41090 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 JvY09JKLIz`z5M_H diff --git a/16/modex105/DEMOS/CHARDEMO.EXE b/16/modex105/DEMOS/CHARDEMO.EXE deleted file mode 100755 index 4015bdf14e1d4067c4c2d9321f00accdf71fe452..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13066 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 RBhN(+NB$^IcBSvV{T~&EV%Y!y diff --git a/16/modex105/DEMOS/PASCAL/TEST5.PAS b/16/modex105/DEMOS/PASCAL/TEST5.PAS deleted file mode 100755 index 7cc56bbb..00000000 --- a/16/modex105/DEMOS/PASCAL/TEST5.PAS +++ /dev/null @@ -1,488 +0,0 @@ -{ ModeX Turbo Pascal Demo Program } -{ Converted to Turbo Pascal by Scott Wyatt } -{ Original program written in QuickBasic by Matt Prichard } -{ Released to the Public Domain } -{ } -{ Thanks to Matt Prichard for his *EXCELLENT* ModeX Library } -{ Additional Comments by Matt Pritchard } - -Uses Crt; - -{$L modex2.obj} { This file is the external ModeX Library .OBJ } -{$F+} - - { Mode Setting Routines } - -Function SET_VGA_MODEX (Mode,MaxXpos,MaxYpos,Pages : integer) : integer; external; -Function SET_MODEX (Mode:integer) : Integer; external; - - { Graphics Primitives } - -Procedure CLEAR_VGA_SCREEN (Color:integer); external; -Procedure SET_POINT (Xpos,Ypos,Color : integer); external; -Function READ_POINT (Xpos,Ypos:integer) : integer; external; -Procedure FILL_BLOCK (Xpos1,Ypos1,Xpos2,Ypos2,Color:integer); external; -Procedure DRAW_LINE (Xpos1,Ypos1,Xpos2,Ypos2,Color:integer); external; - - { VGA DAC Routines } - -Procedure SET_DAC_REGISTER (RegNo,Red,Green,Blue:integer); external; -Procedure GET_DAC_REGISTER (RegNo,Red,Green,Blue:integer); external; - - { Page and Window Control Routines } - -Procedure SET_ACTIVE_PAGE (PageNo:integer); external; -Function GET_ACTIVE_PAGE : integer; external; -Procedure SET_DISPLAY_PAGE (PageNo:integer); external; -Function GET_DISPLAY_PAGE : integer; external; -Procedure SET_WINDOW (DisplayPage,XOffset,YOffset : integer); external; -Function GET_X_OFFSET : integer; external; -Function GET_Y_OFFSET : integer; external; -Procedure SYNC_DISPLAY; external; - - { Text Display Routines } - -Procedure GPRINTC (CharNum,Xpos,Ypos,ColorF,ColorB:integer); external; -Procedure TGPRINTC ( CharNum,Xpos,Ypos,ColorF : integer); external; -Procedure PRINT_STR (Var Text;MaxLen,Xpos,Ypos,ColorF,ColorB:integer); external; -Procedure TPRINT_STR (Var Text;MaxLen,Xpos,Ypos,ColorF:integer); external; -Procedure SET_DISPLAY_FONT (Var FontData;FontNumber:integer); external; - - { Sprite and VGA memory -> Vga memory Copy Routines } - -Procedure DRAW_BITMAP (Var Image;Xpos,Ypos,Width,Height:integer); external; -Procedure TDRAW_BITMAP (Var Image;Xpos,Ypos,Width,Height:integer); external; -Procedure COPY_PAGE (SourcePage,DestPage:integer); external; -Procedure COPY_BITMAP (SourcePage,X1,Y1,X2,Y2,DestPage,DestX1,DestY1:integer); external; - -{$F-} - - -TYPE Sprite = Record - Xpos : INTEGER; - Ypos : INTEGER; - XDir : INTEGER; - YDir : INTEGER; - Shape : INTEGER; - LastX : INTEGER; - LastY : INTEGER; - END; - - -CONST MaxShapes = 32; - Circle_16 : Array[1..16,1..16] of byte = - (( 0, 0, 0, 0, 0, 0, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0), - ( 0, 0, 0, 0, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0), - ( 0, 0, 0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0), - ( 0, 0, 20, 20, 20, 20, 0, 0, 0, 0, 20, 20, 20, 20, 0, 0), - ( 0, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 20, 20, 20, 20, 0), - ( 0, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20, 0), - ( 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20), - ( 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20), - ( 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20), - ( 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20), - ( 0, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20, 0), - ( 0, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 20, 20, 20, 20, 0), - ( 0, 0, 20, 20, 20, 20, 0, 0, 0, 0, 20, 20, 20, 20, 0, 0), - ( 0, 0, 0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0), - ( 0, 0, 0, 0, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0), - ( 0, 0, 0, 0, 0, 0, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0)); - Square_16 : Array[1..16,1..16] of byte = - (( 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21), - ( 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21), - ( 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21), - ( 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21), - ( 21, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 21), - ( 21, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 21), - ( 21, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 21), - ( 21, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 21), - ( 21, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 21), - ( 21, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 21), - ( 21, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 21), - ( 21, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 21), - ( 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21), - ( 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21), - ( 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21), - ( 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21)); - Diamond : Array[1..8,1..8] of byte = - (( 0, 0, 0, 22, 22, 0, 0, 0), - ( 0, 0, 22, 22, 22, 22, 0, 0), - ( 0, 22, 22, 0, 0, 22, 22, 0), - ( 22, 22, 0, 0, 0, 0, 22, 22), - ( 22, 22, 0, 0, 0, 0, 22, 22), - ( 0, 22, 22, 0, 0, 22, 22, 0), - ( 0, 0, 22, 22, 22, 22, 0, 0), - ( 0, 0, 0, 22, 22, 0, 0, 0)); - Rectangle : Array[1..8,1..3] of byte = - (( 23, 23, 23), - ( 23, 23, 23), - ( 23, 23, 23), - ( 23, 23, 23), - ( 23, 23, 23), - ( 23, 23, 23), - ( 23, 23, 23), - ( 23, 23, 23)); - - { Global Variables ? } - -Var - XCenter,X1,Y1,X2,Y2,Z,Colr,XChars,YChars,X,Y,N,Gap : Integer; - s : string; - s1 : Array[1..35] of Char; - ch : Char; - obj : Array[1..64] of Sprite; - ScreenX,ScreenY : Integer; - c, dc, SpriteX, SpriteY, CurrentPage, LastPage : Integer; - SetColor, SDir, PrevColor, PDir : Byte; - XView, YView : Integer; - XView_Change, YView_Change : Integer; - Right : Boolean; - Number_Of_Shapes : Byte; - - - { Error Handler - Returns to Text Mode & Displays Error } - -Procedure ERROR_OUT(s : string); - Begin - asm - mov ah,0 - mov al,3 - int 10h - end; - WriteLn(s); - Halt(0); -END; - - { Routine to Print a PASCAL string using Print_Str } - -Procedure Print_Text(s : string; X,Y,BColor,FColor : integer); -Var - s1 : Array[1..135] of Char; - i : byte; -Begin - For i := 1 to Length(s) DO - s1[i] := s[i]; - Print_Str(s1,Length(s),X,Y,BColor,FColor); -End; - - { Routine to Transparently Print a PASCAL string using TPrint_Str } - -Procedure TPrint_Text(s : string; X,Y,Color : integer); -Var - s1 : Array[1..135] of Char; - i : byte; -Begin - For i := 1 to Length(s) DO - s1[i] := s[i]; - TPrint_Str(s1,Length(s),X,Y,Color); -End; - - { Routines to show test patterns for a given mode } - -Procedure Demo_Res(Mode, Xmax, Ymax : integer); -Begin - - Str(mode,s); - If Set_ModeX(Mode) = 0 Then - Error_Out('Unable to SET_MODEX '+s); - Clear_VGA_Screen(0); - - XCenter := Xmax div 2; - X1 := 10; - Y1 := 10; - X2 := Xmax - 1; - Y2 := Ymax - 1; - - FOR Z := 0 TO 3 DO - Begin - Colr := 31 - Z * 2; - Draw_Line(X1 + Z, Y1 + Z, X2 - Z, Y1 + Z, Colr); - Draw_Line(X1 + Z, Y1 + Z, X1 + Z, Y2 - Z, Colr); - Draw_Line(X1 + Z, Y2 - Z, X2 - Z, Y2 - Z, Colr); - Draw_Line(X2 - Z, Y1 + Z, X2 - Z, Y2 - Z, Colr); - End; - - XChars := Xmax div 10; - YChars := Ymax div 10; - - FOR X := 0 TO XChars - 1 DO - Begin - TGPRINTC(48 + ((X + 1) MOD 10), X * 10 + 1, 1, 9 + ((X div 8) MOD 7)); - DRAW_LINE(X * 10 + 9, 0, X * 10 + 9, 3, 15); - End; - FOR Y := 0 TO YChars - 1 DO - Begin - TGPRINTC(48 + ((Y + 1) MOD 10), 1, Y * 10 + 1, 9 + ((Y div 10) MOD 7)); - DRAW_LINE(0, Y * 10 + 9, 3, Y * 10 + 9, 15); - End; - - { Test Line Drawing } - - FOR X := 0 TO 63 DO - Begin - N := 15 + ((X * 3) div 4); - SET_DAC_REGISTER(64 + X, N, N, N); - SET_DAC_REGISTER(128 + X, 0, N, N); - DRAW_LINE(103 - X, 60, 40 + X, 123, 64 + X); - DRAW_LINE(40, 60 + X, 103, 123 - X, 128 + X); - End; - s := 'Line Test'; - PRINT_Text(s,37,130,1,0); - - { Test Block Fills } - - Y := 60; - Gap := 0; - FOR X := 0 TO 9 DO - Begin - FILL_BLOCK(120, Y, 120 + X, Y + Gap, 64 + X); - FILL_BLOCK(140 - (15 - X), Y, 150 + X, Y + Gap, 230 + X); - FILL_BLOCK(170 - (15 - X), Y, 170, Y + Gap, 128 + X); - Y := Y + Gap + 2; - Gap := Gap + 1; - End; - s := 'Fill Test'; - Print_Text(s,110, 46, 2,0); - - { Test Pixel Write and Read } - - FOR X := 190 TO 250 DO - FOR Y := 60 TO 122 DO - SET_POINT( X, Y, X + Y + X + Y); - - s := 'Pixel Test'; - Print_Text(s,182, 130, 3,0); - - FOR X := 190 TO 250 DO - FOR Y := 60 TO 122 DO - IF READ_POINT(X, Y) <> ((X + Y + X + Y) AND 255) THEN - WriteLn('READ_PIXEL Failure'); - - { Display rest of screen } - - s := ' This is a MODE X demo '; - Print_Text(s,XCenter - (Length(s) * 4), 20, 3, 1); - s := 'Screen Resolution is by '; - X := XCenter - (Length(s) * 4); - Print_Text(s,X,30,4,0); - Str(XMax,s); - Print_Text(s, X + 8 * 21, 30, 8, 0); - Str(YMax,s); - Print_Text(s, X + 8 * 28, 30, 15, 0); - - FOR X := 0 TO 15 DO - Begin - SET_DAC_REGISTER( 230 + X, 63 - X * 4, 0, 15 + X * 3); - DRAW_LINE(30 + X, Ymax - 6 - X, Xmax - 20 - X, Ymax - 6 - X, 230 + X); - End; - s := 'Press to Continue'; - For x := 1 to length(s) DO - s1[x] := s[x]; - TPrint_Str(s1, length(s), XCenter - (26 * 4), Ymax - 18, 5); - - Ch := ReadKey; - IF Ch = #27 Then - Error_Out('Abort'); - -End; - - - { Initialize Sprites for Sprite Demo } - -Procedure Init_Sprites; -Var i : byte; -Begin - For i := 1 to 64 DO - Begin - Obj[i].XPos := Random(300)+10; - Obj[i].YPos := Random(200)+20; - Obj[i].XDir := Random(10)-5; - Obj[i].YDir := Random(10)-5; - If (Obj[i].XDir = 0) AND (Obj[i].YDir = 0) Then - Begin - Obj[i].XDir := Random(5) + 1; - Obj[i].YDir := Random(5) + 1; - End; - Obj[i].Shape := Random(4)+1; - Obj[i].LastX := obj[i].XPos; - Obj[i].LastY := obj[i].YPos; - End; -End; - -Procedure Set_Sprites(number : byte); -Var i : Byte; -Begin - For i := 1 to number DO - Begin - obj[i].LastX := obj[i].XPos; - obj[i].LastY := obj[i].YPos; - obj[i].XPos := obj[i].XPos + obj[i].XDir; - obj[i].YPos := obj[i].YPos + obj[i].YDir; - If (obj[i].XPos > 335) OR (obj[i].XPos < 5 ) Then - obj[i].XDir := -(obj[i].XDir); - If (obj[i].YPos > 220) OR (obj[i].YPos < 5) Then - obj[i].YDir := -(obj[i].YDir); - End; - For i := 1 to number DO - Case obj[i].Shape of - 1 : TDraw_Bitmap(Circle_16,obj[i].XPos,obj[i].YPos,16,16); - 2 : TDraw_Bitmap(Square_16,obj[i].XPos,obj[i].YPos,16,16); - 3 : TDraw_Bitmap(Diamond,obj[i].XPos,obj[i].YPos,8,8); - 4 : TDraw_Bitmap(Rectangle,obj[i].XPos,obj[i].YPos,3,8); - End; -End; - -Procedure Remove_Sprites(p,number : byte); -Var i : byte; -Begin - For i := 1 to number DO - Copy_Bitmap(2,obj[i].LastX,obj[i].LastY,obj[i].LastX+16,obj[i].LastY+16,p,Obj[i].LastX,Obj[i].LastY); -End; - -Procedure Page_Demo; -Begin - Number_Of_Shapes := 64; - XView_Change := 1; - YView_Change := 1; - XView := 1; - YView := 1; - Right := TRUE; - ScreenX := 360; - ScreenY := 240; - PrevColor := 0; - SetColor := 3; - SDir := 1; - PDir := 1; - Str(0,s); - - IF SET_VGA_MODEX(0, ScreenX, ScreenY, 3) = 0 THEN - ERROR_OUT('Unable to SET_VGA_MODEX' + S); - - SET_ACTIVE_PAGE(0); - CLEAR_VGA_SCREEN(0); - PRINT_TEXT('This is a Test of the Following Functions:', 10, 9, 15, 0); - DRAW_LINE( 10, 18, 350, 18, 4); - Print_Text('SET_ACTIVE_PAGE', 10, 20, 1, 0); - Print_Text('SET_DISPLAY_PAGE', 10, 30, 3,0); - Print_Text('SET_DAC_REGISTER', 10, 40, 3, 0); - Print_Text('CLEAR_VGA_SCREEN', 10, 50, 13, 0); - Print_Text('TDRAW_BITMAP', 10, 60, 14, 0); - Print_Text('COPY_PAGE', 10, 70, 3, 0); - Print_Text('COPY_BITMAP', 10, 80, 13, 0); - Print_Text('GPRINTC', 10, 90, 1, 0); - Print_Text('TGPRINTC', 10, 100, 3, 0); - Print_Text('SYNC_DISPLAY', 10, 110, 3, 0); - Print_Text('SET_WINDOW', 10, 120, 14, 0); - Print_Text('VIRTUAL SCREEN SIZES', 190, 20, 1, 0); - Print_Text(' SMOOTH SCROLLING', 190, 30, 3, 0); - Print_Text(' SPRITE ANIMATION', 190, 40, 13, 0); - Print_Text(' PAGE FLIPPING', 190, 50, 3, 0); - Print_Text(' COLOR CYCLING', 190, 60, 14, 0); - - FOR X := 0 TO 60 DO - Begin - SET_DAC_REGISTER( 50 + X, 3 + X, 0, 60 - X); - SET_DAC_REGISTER( 150 + X, 3 + X, 0, 60 - X); - End; - - c := 0; - DC := 1; - FOR X := 0 TO ScreenX div 2 DO - Begin - DRAW_LINE( ScreenX div 2 - 1, ScreenY div 4, X, ScreenY - 1, c + 50); - DRAW_LINE( ScreenX div 2, ScreenY div 4, ScreenX - X - 1, ScreenY - 1, c + 50); - c := c + DC; - IF (c = 0) OR (c = 60) THEN DC := -DC; - End; - - TPrint_Text('Press to Continue', 82, 190, 15); - TPrint_Text('<+> = Fewer Shapes <-> = More Shapes', 32, 204, 12); - COPY_PAGE( 0, 1); - COPY_PAGE( 0, 2); - - Ch := #0; - CurrentPage := 1; - LastPage := 0; - Set_Sprites(Number_Of_Shapes); - For c := 1 to 4 DO - Set_Dac_Register(19+c,63-(c*10),0,0); - - While Ch <> #27 DO - Begin - Set_Active_Page(currentpage); - Set_Sprites(Number_Of_Shapes); - If Right Then - Begin - XView := XView + XView_Change; - If (XView > 38) OR (XView < 2) Then - Begin - XView_Change := -(XView_Change); - Right := FALSE; - End; - End - Else - Begin - YView := YView + YView_Change; - If (YView > 38) OR (YView < 2) Then - Begin - YView_Change := -(YView_Change); - Right := TRUE; - End; - End; - - Set_Window(currentpage,XView,YView); - Set_Display_Page(currentpage); - Set_Dac_Register(50 + PrevColor, 3 + PrevColor, 0, 60 - PrevColor); - Set_Dac_Register(50 + SetColor, SetColor, 10, 63 - SetColor); - Set_Dac_Register(150 + PrevColor, 3 + PrevColor, 0, 60 - PrevColor); - Set_Dac_Register(150 + SetColor, 63, 63, SetColor); - SetColor := SetColor + SDir; - IF (SetColor = 60) OR (SetColor = 0) THEN SDir := -SDir; - PrevColor := PrevColor + PDir; - IF (PrevColor = 60) OR (PrevColor = 0) THEN PDir := -PDir; - Remove_Sprites(lastpage,Number_Of_Shapes); - - If Keypressed Then - Begin - Ch := ReadKey; - Case Ch of - '-' : If Number_Of_Shapes > 1 Then - Begin - c := Number_Of_Shapes; - Copy_Bitmap(2,obj[c].XPos,obj[c].YPos,obj[c].XPos+16,obj[c].YPos+16, - currentpage,obj[c].XPos,obj[c].YPos); - Dec(Number_Of_Shapes); - End; - '+' : If Number_Of_Shapes < 64 Then Inc(Number_Of_Shapes); - End; - End; - lastpage := (lastpage+1) MOD 2; - currentpage := (currentpage+1) MOD 2; - End; -END; - - { MAIN ROUTINE - Run Through Demos and Exit } - -Begin - - Randomize; - Init_Sprites; - - Demo_Res(0, 320, 200); - Demo_Res(1, 320, 400); - Demo_Res(2, 360, 200); - Demo_Res(3, 360, 400); - Demo_Res(4, 320, 240); - Demo_Res(5, 320, 480); - Demo_Res(6, 360, 240); - Demo_Res(7, 360, 480); - Page_Demo; - - asm - mov ah,0 - mov al,3 - int 10h - end; - WriteLn('THIS MODE X DEMO IS FINISHED'); - -END. \ No newline at end of file diff --git a/16/modex105/DEMOS/QB45/MAKE-LIB.BAT b/16/modex105/DEMOS/QB45/MAKE-LIB.BAT deleted file mode 100755 index b04876ad..00000000 --- a/16/modex105/DEMOS/QB45/MAKE-LIB.BAT +++ /dev/null @@ -1,5 +0,0 @@ -ECHO ... Building MODEX.QLB for QUICKBASIC 4.5 -LIB MODEX -+MODEX,, -LIB MODEX -+UTILS,, -DEL MODEX.BAK -LINK /Q MODEX+UTILS, MODEX.QLB, NUL, C:\QB45\BQLB45.LIB; diff --git a/16/modex105/DEMOS/QB45/MODEX.BI b/16/modex105/DEMOS/QB45/MODEX.BI deleted file mode 100755 index 6b1d7afe..00000000 --- a/16/modex105/DEMOS/QB45/MODEX.BI +++ /dev/null @@ -1,63 +0,0 @@ - - ' ===== SCREEN RESOLUTIONS ===== - -CONST Mode320x200 = 0, Mode320x400 = 1 -CONST Mode360x200 = 2, Mode360x400 = 3 -CONST Mode320x240 = 4, Mode320x480 = 5 -CONST Mode360x240 = 6, Mode360x480 = 7 - - ' ===== MODE X SETUP ROUTINES ===== - -DECLARE FUNCTION SET.VGA.MODEX% ALIAS "SET_VGA_MODEX" (BYVAL ModeType%, BYVAL MaxXpos%, BYVAL MaxYpos%, BYVAL Pages%) -DECLARE FUNCTION SET.MODEX% ALIAS "SET_MODEX" (BYVAL Mode%) - - ' ===== BASIC GRAPHICS PRIMITIVES ===== - -DECLARE SUB CLEAR.VGA.SCREEN ALIAS "CLEAR_VGA_SCREEN" (BYVAL ColorNum%) -DECLARE SUB SET.POINT ALIAS "SET_POINT" (BYVAL Xpos%, BYVAL Ypos%, BYVAL ColorNum%) -DECLARE FUNCTION READ.POINT% ALIAS "READ_POINT" (BYVAL Xpos%, BYVAL Ypos%) -DECLARE SUB FILL.BLOCK ALIAS "FILL_BLOCK" (BYVAL Xpos1%, BYVAL Ypos1%, BYVAL Xpos2%, BYVAL Ypos2%, BYVAL ColorNum%) -DECLARE SUB DRAW.LINE ALIAS "DRAW_LINE" (BYVAL Xpos1%, BYVAL Ypos1%, BYVAL Xpos2%, BYVAL Ypos2%, BYVAL ColorNum%) - - ' ===== DAC COLOR REGISTER ROUTINES ===== - -DECLARE SUB SET.DAC.REGISTER ALIAS "SET_DAC_REGISTER" (BYVAL RegNo%, BYVAL Red%, BYVAL Green%, BYVAL Blue%) -DECLARE SUB GET.DAC.REGISTER ALIAS "GET_DAC_REGISTER" (BYVAL RegNo%, Red%, Green%, Blue%) -DECLARE SUB LOAD.DAC.REGISTERS ALIAS "LOAD_DAC_REGISTERS" (SEG PalData AS ANY, BYVAL StartReg%, BYVAL EndReg%, BYVAL VSync%) -DECLARE SUB READ.DAC.REGISTERS ALIAS "READ_DAC_REGISTERS" (SEG PalData AS ANY, BYVAL StartReg%, BYVAL EndReg%) - - - ' ===== PAGE FLIPPING AND SCROLLING ROUTINES ===== - -DECLARE SUB SET.ACTIVE.PAGE ALIAS "SET_ACTIVE_PAGE" (BYVAL PageNo%) -DECLARE FUNCTION GET.ACTIVE.PAGE% ALIAS "GET_ACTIVE_PAGE" -DECLARE SUB SET.DISPLAY.PAGE ALIAS "SET_DISPLAY_PAGE" (BYVAL PageNo%) -DECLARE FUNCTION GET.DISPLAY.PAGE% ALIAS "GET_DISPLAY_PAGE" -DECLARE SUB SET.WINDOW ALIAS "SET_WINDOW" (BYVAL DisplayPage%, BYVAL XOffset%, BYVAL YOffset%) -DECLARE FUNCTION GET.X.OFFSET% ALIAS "GET_X_OFFSET" () -DECLARE FUNCTION GET.Y.OFFSET% ALIAS "GET_Y_OFFSET" () -DECLARE SUB SYNC.DISPLAY ALIAS "SYNC_DISPLAY" - - ' ===== TEXT DISPLAY ROUTINES ===== - -DECLARE SUB GPRINTC (BYVAL CharacterNum%, BYVAL Xpos%, BYVAL Ypos%, BYVAL ColorF%, BYVAL ColorB%) -DECLARE SUB TGPRINTC (BYVAL CharacterNum%, BYVAL Xpos%, BYVAL Ypos%, BYVAL ColorF%) -DECLARE SUB PRINT.STR ALIAS "PRINT_STR" (BYVAL StrSeg%, BYVAL StrOfs%, BYVAL MaxLen%, BYVAL Xpos%, BYVAL Ypos%, BYVAL ColorF%, BYVAL ColorB%) -DECLARE SUB TPRINT.STR ALIAS "TPRINT_STR" (BYVAL StrSeg%, BYVAL StrOfs%, BYVAL MaxLen%, BYVAL Xpos%, BYVAL Ypos%, BYVAL ColorF%) -DECLARE SUB SET.DISPLAY.FONT ALIAS "SET_DISPLAY_FONT" (SEG FontData AS ANY, BYVAL FontNumber%) - - ' ===== BITMAP (SPRITE) DISPLAY ROUTINES ===== - -DECLARE SUB DRAW.BITMAP ALIAS "DRAW_BITMAP" (SEG Image AS ANY, BYVAL Xpos%, BYVAL Ypos%, BYVAL xWidth%, BYVAL Height%) -DECLARE SUB TDRAW.BITMAP ALIAS "TDRAW_BITMAP" (SEG Image AS ANY, BYVAL Xpos%, BYVAL Ypos%, BYVAL xWidth%, BYVAL Height%) - - ' ==== VIDEO MEMORY to VIDEO MEMORY COPY ROUTINES ===== - -DECLARE SUB COPY.PAGE ALIAS "COPY_PAGE" (BYVAL SourcePage%, BYVAL DestPage%) -DECLARE SUB COPY.BITMAP ALIAS "COPY_BITMAP" (BYVAL SourcePage%, BYVAL X1%, BYVAL Y1%, BYVAL X2%, BYVAL Y2%, BYVAL DestPage%, BYVAL DestX1%, BYVAL DestY1%) - - - - - - diff --git a/16/modex105/DEMOS/QB45/MODEX.QLB b/16/modex105/DEMOS/QB45/MODEX.QLB deleted file mode 100755 index 90122c134b3116f960cfd35a3f2d6144bfa2a819..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9739 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 ((X + Y + X + Y) AND 255) THEN - ERROR.OUT "READ.PIXEL Failure" - END IF - NEXT Y - NEXT X - - - - Msg$ = " This is a MODE X demo " - PRINT.TEXT Msg$, XCenter - (LEN(Msg$) * 4), 20, c.bRED, c.BLUE - Msg$ = "Screen Resolution is by " - Xp = XCenter - (LEN(Msg$) * 4) - PRINT.TEXT Msg$, Xp, 30, c.bGREEN, c.BLACK - - PRINT.TEXT LTRIM$(STR$(Xmax)), Xp + 8 * 21, 30, c.bPURPLE, c.BLACK - PRINT.TEXT LTRIM$(STR$(Ymax)), Xp + 8 * 28, 30, c.bWHITE, c.BLACK - - FOR X = 0 TO 15 - SET.DAC.REGISTER 230 + X, 63 - X * 4, 0, 15 + X * 3 - DRAW.LINE 30 + X, Ymax - 6 - X, Xmax - 20 - X, Ymax - 6 - X, 230 + X - NEXT X - TPRINT.TEXT "Press to Continue", XCenter - (26 * 4), Ymax - 18, c.YELLOW - - X = GET.KEY% - IF X = KyESC THEN ERROR.OUT "ABORT" - -END SUB - -SUB ERROR.OUT (Message$) - - SET.VIDEO.MODE 3 - DOS.PRINT Message$ - END - -END SUB - -FUNCTION GET.KEY% - - DO - X = SCAN.KEYBOARD - LOOP UNTIL X - - GET.KEY% = X - -END FUNCTION - -SUB LOAD.SHAPES - -DIM Grid(1 TO 32, 1 TO 32) - - FOR Shape = 0 TO MaxShapes - 1 - - FOR Y = 1 TO 32 - FOR X = 1 TO 32 - Grid(X, Y) = 0 - NEXT X - NEXT Y - - Style = RANDOM.INT(6) - Colour = 1 + RANDOM.INT(15) - - SELECT CASE Style - - CASE 0: ' Solid Box - - DO - xWidth = 3 + RANDOM.INT(30) - yWidth = 3 + RANDOM.INT(30) - LOOP UNTIL ((xWidth * yWidth) <= 512) - - FOR Y = 1 TO yWidth - FOR X = 1 TO xWidth - Grid(X, Y) = Colour - NEXT X - NEXT Y - - CASE 1: ' Hollow Box - - DO - xWidth = 5 + RANDOM.INT(28) - yWidth = 5 + RANDOM.INT(28) - LOOP UNTIL ((xWidth * yWidth) <= 512) - - FOR Y = 1 TO yWidth - FOR X = 1 TO xWidth - Grid(X, Y) = Colour - NEXT X - NEXT Y - - HollowX = 1 + RANDOM.INT(xWidth \ 2 - 1) - HollowY = 1 + RANDOM.INT(yWidth \ 2 - 1) - - FOR Y = HollowY + 1 TO yWidth - HollowY - FOR X = HollowX + 1 TO xWidth - HollowX - Grid(X, Y) = nil - NEXT X - NEXT Y - - CASE 2: ' Solid Diamond - - xWidth = 3 + 2 * RANDOM.INT(10) - yWidth = xWidth - Centre = xWidth \ 2 - - FOR Y = 0 TO Centre - FOR X = 0 TO Y - Grid(Centre - X + 1, Y + 1) = Colour - Grid(Centre + X + 1, Y + 1) = Colour - Grid(Centre - X + 1, yWidth - Y) = Colour - Grid(Centre + X + 1, yWidth - Y) = Colour - NEXT X - NEXT Y - - - CASE 3: ' Hollow Diamond - - - xWidth = 3 + 2 * RANDOM.INT(10) - yWidth = xWidth - Centre = xWidth \ 2 - sWidth = RANDOM.INT(Centre) - - FOR Y = 0 TO Centre - FOR X = 0 TO Y - IF X + (Centre - Y) >= sWidth THEN - Grid(Centre - X + 1, Y + 1) = Colour - Grid(Centre + X + 1, Y + 1) = Colour - Grid(Centre - X + 1, yWidth - Y) = Colour - Grid(Centre + X + 1, yWidth - Y) = Colour - END IF - NEXT X - NEXT Y - - CASE 4: ' Ball - - xWidth = 7 + 2 * RANDOM.INT(8) - yWidth = xWidth - Centre = 1 + xWidth \ 2 - - FOR Y = 1 TO yWidth - FOR X = 1 TO xWidth - D = SQR(((Centre - X) * (Centre - X)) + ((Centre - Y) * (Centre - Y))) - IF D < Centre THEN Grid(X, Y) = 150 + Colour * 2 + D * 3 - NEXT X - NEXT Y - - CASE 5: ' Ball - - - xWidth = 7 + 2 * RANDOM.INT(8) - yWidth = xWidth - Centre = 1 + xWidth \ 2 - sWidth = RANDOM.INT(xWidth) - - FOR Y = 1 TO yWidth - FOR X = 1 TO xWidth - D = SQR(((Centre - X) * (Centre - X)) + ((Centre - Y) * (Centre - Y))) - IF D < Centre AND D >= sWidth THEN Grid(X, Y) = 150 + Colour * 2 + D * 3 - NEXT X - NEXT Y - - END SELECT - - Img(Shape).xWidth = xWidth - Img(Shape).yWidth = yWidth - - A$ = STRING$(xWidth * yWidth, nil) - - c = 1 - FOR Y = 1 TO yWidth - FOR X = 1 TO xWidth - MID$(A$, c, 1) = CHR$(Grid(X, Y)) - c = c + 1 - NEXT X - NEXT Y - - Img(Shape).ImgData = A$ - - - NEXT Shape - -END SUB - -SUB PAGE.DEMO - -CONST MaxSprites = 64 - -DIM Obj(MaxSprites) AS Sprite -DIM LastX(MaxSprites, 1), LastY(MaxSprites, 1) -DIM LastObjects(1) - - ScreenX = 360: ScreenY = 240 - - IF SET.VGA.MODEX%(Mode320x200, ScreenX, ScreenY, 3) = 0 THEN - ERROR.OUT "Unable to SET_VGA_MODEX" + STR$(Mode) - END IF - - SET.ACTIVE.PAGE 0 - - CLEAR.VGA.SCREEN c.BLACK - - PRINT.TEXT "This is a Test of the Following Functions:", 10, 9, c.bWHITE, c.BLACK - - DRAW.LINE 10, 18, 350, 18, c.YELLOW - PRINT.TEXT "SET_ACTIVE_PAGE", 10, 20, c.bBLUE, c.BLACK - PRINT.TEXT "SET_DISPLAY_PAGE", 10, 30, c.GREEN, c.BLACK - PRINT.TEXT "SET_DAC_REGISTER", 10, 40, c.RED, c.BLACK - PRINT.TEXT "CLEAR_VGA_SCREEN", 10, 50, c.CYAN, c.BLACK - - PRINT.TEXT "TDRAW_BITMAP", 10, 60, c.PURPLE, c.BLACK - PRINT.TEXT "COPY_PAGE", 10, 70, c.GREEN, c.BLACK - PRINT.TEXT "COPY_BITMAP", 10, 80, c.CYAN, c.BLACK - - PRINT.TEXT "GPRINTC", 10, 90, c.BLUE, c.BLACK - PRINT.TEXT "TGPRINTC", 10, 100, c.GREEN, c.BLACK - PRINT.TEXT "SET_WINDOW", 10, 110, c.RED, c.BLACK - - PRINT.TEXT "VIRTUAL SCREEN SIZES", 190, 20, c.bBLUE, c.BLACK - PRINT.TEXT " SMOOTH SCROLLING", 190, 30, c.GREEN, c.BLACK - PRINT.TEXT " SPRITE ANIMATION", 190, 40, c.CYAN, c.BLACK - PRINT.TEXT " PAGE FLIPPING", 190, 50, c.RED, c.BLACK - PRINT.TEXT " COLOR CYCLING", 190, 60, c.PURPLE, c.BLACK - - - FOR X = 0 TO 60 - SET.DAC.REGISTER 50 + X, 3 + X, 0, 60 - X - SET.DAC.REGISTER 150 + X, 3 + X, 0, 60 - X - NEXT X - - c = 0: DC = 1 - FOR X = 0 TO ScreenX \ 2 - DRAW.LINE ScreenX \ 2 - 1, ScreenY \ 4, X, ScreenY - 1, c + 50 - DRAW.LINE ScreenX \ 2, ScreenY \ 4, ScreenX - X - 1, ScreenY - 1, c + 50 - c = c + DC - IF c = 0 OR c = 60 THEN DC = -DC - NEXT X - - TPRINT.TEXT "Press to Continue", 72, 190, c.bWHITE - TPRINT.TEXT "< > = Faster < > = Slower", 72, 204, c.bGREEN - TPRINT.TEXT "< > = Fewer Shapes < > = More Shapes", 32, 218, c.bCYAN - - TGPRINTC 43, 80, 204, c.YELLOW - TGPRINTC 45, 200, 204, c.YELLOW - - TGPRINTC 25, 40, 218, c.YELLOW - TGPRINTC 24, 200, 218, c.YELLOW - - COPY.PAGE 0, 1 - COPY.PAGE 0, 2 - - FOR X = 1 TO MaxSprites - DO - Obj(X).XDir = RANDOM.INT(7) - 3 - Obj(X).YDir = RANDOM.INT(7) - 3 - LOOP WHILE (Obj(X).XDir = 0 AND Obj(X).YDir = 0) - - Obj(X).Shape = X MOD MaxShapes - - SpriteX = Img(Obj(X).Shape).xWidth - SpriteY = Img(Obj(X).Shape).yWidth - - Obj(X).Xpos = 1 + RANDOM.INT(ScreenX - SpriteX - 2) - Obj(X).Ypos = 1 + RANDOM.INT(ScreenY - SpriteY - 2) - - LastX(X, 0) = Obj(X).Xpos - LastX(X, 1) = Obj(X).Xpos - LastY(X, 0) = Obj(X).Ypos - LastY(X, 1) = Obj(X).Ypos - NEXT X - - CurrentPage = 0 - - 'View Shift... - - ViewX = 0 - ViewY = 0 - ViewMax = 3 - ViewCnt = 0 - ViewXD = 1 - ViewYD = 1 - - SetColor = 3: SDir = 1 - PrevColor = 0: PDir = 1 - - VisObjects = MaxSprites \ 2 - LastObjects(0) = 0 - LastObjects(1) = 0 - -DRAW.LOOP: - - - SET.ACTIVE.PAGE CurrentPage - - ' Erase Old Images - - FOR X = 1 TO LastObjects(CurrentPage) - - X1 = LastX(X, CurrentPage) AND &HFFFC - Y1 = LastY(X, CurrentPage) - X2 = ((LastX(X, CurrentPage) + Img(Obj(X).Shape).xWidth)) OR 3 - Y2 = Y1 + Img(Obj(X).Shape).yWidth - 1 - - COPY.BITMAP 2, X1, Y1, X2, Y2, CurrentPage, X1, Y1 - - NEXT X - - ' Draw new images - - FOR X = 1 TO VisObjects - - SpriteX = Img(Obj(X).Shape).xWidth - SpriteY = Img(Obj(X).Shape).yWidth - - ' Move Sprite - -REDOX: - NewX = Obj(X).Xpos + Obj(X).XDir - IF NewX < 0 OR NewX + SpriteX > ScreenX THEN - Obj(X).XDir = -Obj(X).XDir - IF RANDOM.INT(20) = 1 THEN - DO - Obj(X).XDir = RANDOM.INT(7) - 3 - Obj(X).YDir = RANDOM.INT(7) - 3 - LOOP WHILE (Obj(X).XDir = 0 AND Obj(X).YDir = 0) - GOTO REDOX - END IF - END IF - Obj(X).Xpos = Obj(X).Xpos + Obj(X).XDir - -REDOY: - NewY = Obj(X).Ypos + Obj(X).YDir - IF NewY < 0 OR NewY + SpriteY > ScreenY THEN - Obj(X).YDir = -Obj(X).YDir - IF RANDOM.INT(20) = 1 THEN - DO - Obj(X).XDir = RANDOM.INT(7) - 3 - Obj(X).YDir = RANDOM.INT(7) - 3 - LOOP WHILE (Obj(X).XDir = 0 AND Obj(X).YDir = 0) - GOTO REDOY - END IF - END IF - Obj(X).Ypos = Obj(X).Ypos + Obj(X).YDir - - 'Draw Sprite - - TDRAW.BITMAP Img(Obj(X).Shape), Obj(X).Xpos, Obj(X).Ypos, SpriteX, SpriteY - - LastX(X, CurrentPage) = Obj(X).Xpos - LastY(X, CurrentPage) = Obj(X).Ypos - - NEXT X - - LastObjects(CurrentPage) = VisObjects - - ' Pan Screen Back & Forth - - ViewCnt = ViewCnt + 1 - IF ViewCnt >= ViewMax THEN - ViewX = ViewX + ViewXD - IF ViewX = 0 OR ViewX = 39 THEN ViewXD = -ViewXD - IF ViewXD < 0 THEN - ViewY = ViewY + ViewYD - IF ViewY = 0 OR ViewY = 39 THEN ViewYD = -ViewYD - END IF - - SET.WINDOW CurrentPage, ViewX, ViewY - - ViewCnt = 0 - ELSE - SET.DISPLAY.PAGE CurrentPage - END IF - - ' Cycle Colors - - SET.DAC.REGISTER 50 + PrevColor, 3 + PrevColor, 0, 60 - PrevColor - SET.DAC.REGISTER 50 + SetColor, SetColor, 10, 63 - SetColor - - SET.DAC.REGISTER 150 + PrevColor, 3 + PrevColor, 0, 60 - PrevColor - SET.DAC.REGISTER 150 + SetColor, 63, 63, SetColor - - SetColor = SetColor + SDir - IF SetColor = 60 OR SetColor = 0 THEN SDir = -SDir - - PrevColor = PrevColor + PDir - IF PrevColor = 60 OR PrevColor = 0 THEN PDir = -PDir - - CurrentPage = 1 - CurrentPage - - Code = SCAN.KEYBOARD - - IF Code = False THEN GOTO DRAW.LOOP - - IF Code = KyPlus THEN - IF ViewMax < 12 THEN ViewMax = ViewMax + 1 - GOTO DRAW.LOOP - END IF - - IF Code = KyMinus THEN - IF ViewMax > 1 THEN ViewMax = ViewMax - 1 - IF ViewCnt >= ViewMax THEN ViewCnt = 0 - GOTO DRAW.LOOP - END IF - - IF Code = KyUp THEN - IF VisObjects < MaxSprites THEN VisObjects = VisObjects + 1 - GOTO DRAW.LOOP - END IF - - IF Code = KyDown THEN - IF VisObjects > 1 THEN VisObjects = VisObjects - 1 - GOTO DRAW.LOOP - END IF - - -END SUB - -SUB PRINT.TEXT (Text$, Xpos, Ypos, ColorF, ColorB) - - IF LEN(Text$) = 0 THEN EXIT SUB - PRINT.STR VARSEG(Text$), SADD(Text$), LEN(Text$), Xpos, Ypos, ColorF, ColorB - - -END SUB - -SUB TPRINT.TEXT (Text$, Xpos, Ypos, ColorF) - - IF LEN(Text$) = 0 THEN EXIT SUB - - TPRINT.STR VARSEG(Text$), SADD(Text$), LEN(Text$), Xpos, Ypos, ColorF - -END SUB - diff --git a/16/modex105/DEMOS/QB45/TEST6A.EXE b/16/modex105/DEMOS/QB45/TEST6A.EXE deleted file mode 100755 index e61d038796159e3fdb7d12c95525a9dafb87995f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40544 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 - push R1 ; Save R1 - PUSHx R2, R3, R4, R5, R6, R7, R8 - ENDIF -ENDM - -POPx MACRO R1, R2, R3, R4, R5, R6, R7, R8 - IFNB - pop R1 ; Restore R1 - POPx R2, R3, R4, R5, R6, R7, R8 - ENDIF -ENDM - - ; Macro to Clear a Register to 0 - -CLR MACRO Register - xor Register, Register ; Set Register = 0 -ENDM - - ; Macros to Decrement Counter & Jump on Condition - -LOOPx MACRO Register, Destination - dec Register ; Counter-- - jnz Destination ; Jump if not 0 -ENDM - -LOOPjz MACRO Register, Destination - dec Register ; Counter-- - jz Destination ; Jump if 0 -ENDM - - - ; ==== General Constants ==== - - False EQU 0 - True EQU -1 - nil EQU 0 - - b EQU BYTE PTR - w EQU WORD PTR - d EQU DWORD PTR - o EQU OFFSET - f EQU FAR PTR - s EQU SHORT - ?x4 EQU - ?x3 EQU - - -IFDEF FARSTRINGS - - EXTRN stringaddress:far - EXTRN stringlength:far - -ENDIF - - - .Data - - EVEN - -RND_Seed DW 7397, 29447, 802 -RND_Mult DW 179, 183, 182 -RND_ModV DW 32771, 32779, 32783 - -CR_LF DB 13, 10 ; the CRLF data - - .Code - -;================= -;DOS_PRINT (Text$) -;================= -; -; Prints Text Directly to DOS console w/ CR/LF -; - - PUBLIC DOS_PRINT - -DP_Stack STRUC - DW ?x4 ; DI, SI, DS, BP - DD ? ; Caller - DP_Text DW ? ; Address of Text$ Descriptor -DP_Stack ENDS - - -DOS_PRINT PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - mov BP, SP ; Set up Stack Frame - - mov SI, [BP].DP_Text ; Get Addr of Text$ descriptor - -IFDEF FARSTRINGS - push SI ; Push Addr of BC7 Decriptor Ptr - call stringaddress ; Get Address + Len of string!!! - ; DX:AX = Addr CX = Len - mov DS, DX ; DS = DX = Segment of string - mov DX, AX ; DX = AX = Offset of String -ELSE - mov CX, [SI] ; put its length into CX - mov DX, [SI+02] ; now DS:DX points to the String -ENDIF - - jcxz @No_Print ; Don't Print if empty - - mov BX, 1 ; 1= DOS Handle for Display - mov AH, 40h ; Write Text Function - int 21h ; Call DOS to do it - -@No_Print: - mov AX, SEG DGROUP ; Restore DGroup - mov DS, AX - - mov DX, o CR_LF ; Get Addr of CR/LF pair - mov CX, 2 ; 2 Characters to Write - mov BX, 1 ; 1= DOS Handle for Display - - mov AH, 40h ; Write Text Function - int 21h ; Call DOS to do it - - cld ; Reset Direction Flag - POPx DI, SI, DS, BP ; Restore Saved Registers - ret 2 ; Exit & Clean Up Stack - -DOS_PRINT ENDP - - -;================== -;DOS_PRINTS (Text$) -;================== -; -; Print Text$ Directly to DOS console -; without a trailing CR/LF -; - - PUBLIC DOS_PRINTS - -DOS_PRINTS PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - mov BP, SP ; Set up Stack Frame - - mov SI, [BP].DP_Text ; Get Addr of Text$ descriptor - -IFDEF FARSTRINGS - push SI ; Push Addr of BC7 Decriptor Ptr - call stringaddress ; Get Address + Len of string!!! - ; DX:AX = Addr CX = Len - mov DS, DX ; DS = DX = Segment of string - mov DX, AX ; DX = AX = Offset of String -ELSE - mov CX, [SI] ; put its length into CX - mov DX, [SI+02] ; now DS:DX points to the String -ENDIF - - jcxz @DPS_Exit ; Don't Print if empty - - mov BX, 1 ; 1= DOS Handle for Display - mov AH, 40h ; Write Text Function - int 21h ; Call DOS to do it - -@DPS_Exit: - cld ; Reset Direction Flag - POPx DI, SI, DS, BP ; Restore Saved Registers - ret 2 ; Exit & Clean Up Stack - -DOS_PRINTS ENDP - - -;====================== -;SET_VIDEO_MODE (Mode%) -;====================== -; -; Sets the Video Mode through the BIOS -; - - PUBLIC SET_VIDEO_MODE - -SVM_Stack STRUC - DW ?x4 ; DI, SI, DS, BP - DD ? ; Caller - SVM_Mode DB ?,? ; Desired Video Mode -SVM_Stack ENDS - - -SET_VIDEO_MODE PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - mov BP, SP ; Set up Stack Frame - - CLR AH ; Function 0 - mov AL, [BP].SVM_Mode ; Get Mode # - - int 10H ; Change Video Modes - -@SVM_Exit: - POPx DI, SI, DS, BP ; Restore Saved Registers - ret 2 ; Exit & Clean Up Stack - -SET_VIDEO_MODE ENDP - - -;============== -;SCAN_KEYBOARD% -;============== -; -; Function to scan keyboard for a pressed key -; - - PUBLIC SCAN_KEYBOARD - -SCAN_KEYBOARD PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - - mov AH, 01H ; Function #1 - int 16H ; Call Keyboard Driver - jz @SK_NO_KEY ; Exit if Zero flag set - - mov AH, 00H ; Remove Key from Buffer - int 16H ; Get Keycode in AX - - or AL, AL ; Low Byte Set (Ascii?) - jz @SK_Exit ; if not, it's a F-Key - - CLR AH ; Clear ScanCode if Ascii - jmp s @SK_Exit ; Return Key in AX - -@SK_NO_KEY: - CLR AX ; Return Nil (no Keypress) - -@SK_Exit: - cld ; Reset Direction Flag - POPx DI, SI, DS, BP ; Restore Saved Registers - ret ; Exit & Clean Up Stack - -SCAN_KEYBOARD ENDP - - -;==================== -;RANDOM_INT (MaxInt%) -;==================== -; -; Returns a pseudo-random number in the range of (0.. MaxInt-1) -; - - - PUBLIC RANDOM_INT - -RI_Stack STRUC - DW ? ; BP - DD ? ; Caller - RI_MaxVal DW ? ; Maximum Value to Return + 1 -RI_Stack ENDS - - -RANDOM_INT PROC FAR - - push BP ; Preserve Important Registers - mov BP, SP ; Set up Stack Frame - - CLR BX ; BX is the data index - CLR CX ; CX is the accumulator - -REPT 3 - mov AX, RND_Seed[BX] ; load the initial seed - mul RND_Mult[BX] ; multiply it - div RND_ModV[BX] ; and obtain the Mod value - mov RND_Seed[BX], DX ; save that for the next time - - add CX, DX ; add it into the accumulator - inc BX - inc BX ; point to the next set of values -ENDM - - mov AX, CX ; AX = Random # - CLR DX ; DX = 0 - div [BP].RI_MaxVal ; DX = DX:AX / MAxVal Remainder - - mov AX, DX - - pop BP ; Restore BP - ret 2 ; back to BASIC with AX holding the result - -RANDOM_INT ENDP - - -;=========== -;INIT_RANDOM -;=========== -; -; Scrambles the psuedo-random number sequence -; (XOR's the seed value with the timer) -; - - PUBLIC INIT_RANDOM - -INIT_RANDOM PROC FAR - - clr AX ; Segment = 0000 - mov ES, AX - mov AX, ES:[046Ch] ; Get Timer Lo Word - - xor RND_Seed, AX ; Scramble 1st Seed - - ret ; Exit & Clean Up Stack - -INIT_RANDOM ENDP - - -;==================== -;INT_SQR (X%, Round%) -;==================== -; -; Returns the Integer Square Root of (X) -; Round allows the return value to be rounded to the -; nearest integer value by passing 0x80. Passing 0 -; return the Integer Portion only. The rounding amound is -; a number from 0 to 1 multiplied by 256, thus -; 0.5 * 0x100 = 0x80! -; - -ISQ_Stack STRUC - DW ?,? ; BP, DI - DD ? ; Caller - ISQ_Round DW ? ; Amount to Round Result * 256 - ISQ_X DW ? ; "X" -ISQ_Stack ENDS - - PUBLIC INT_SQR - -INT_SQR PROC FAR - - PUSHx BP, DI ; Save BP - mov BP, SP ; Set up Stack Frame - - xor AX, AX ; {xor eax,eax} - xor DX, DX ; {xor edx,edx} - mov DI, [BP].ISQ_X ; {mov edi,x} - - mov CX, 16 ; {mov cx, 32} - -@ISQ_L: - - shl DI, 1 ; {shl edi,1} - rcl DX, 1 ; {rcl edx,1} - shl DI, 1 ; {shl edi,1} - rcl DX, 1 ; {rcl edx,1} - shl AX, 1 ; {shl eax,1} - mov BX, AX ; {mov ebx,eax} - shl BX, 1 ; {shl ebx,1} - inc BX ; {inc ebx} - cmp DX, BX ; {cmp edx,ebx} - jl @ISQ_S - - sub DX, BX ; {sub edx,ebx} - inc AX ; {inc eax} - -@ISQ_S: - loop @ISQ_L - - add ax, [BP].ISQ_Round ; {add eax,$00008000} - ; {*round* result in hi word: ie. +0.5} - shr ax, 8 ; {shr eax,16} {to ax (result)} - - POPx DI, BP ; Restore Registers - ret 4 ; Exit - -INT_SQR ENDP - - -;============ -;TIMER_COUNT& -;============ -; -; Returns the current timer value as an integer/long integer -; - - - PUBLIC TIMER_COUNT - -TIMER_COUNT PROC FAR - - clr AX ; Segment = 0000 - mov ES, AX ; use ES to get at data - mov AX, ES:[046Ch] ; Get Timer Lo Word - mov DX, ES:[046Eh] ; Get Timer Hi Word - ret ; Exit & Return value in DX:AX - -TIMER_COUNT ENDP - - - END diff --git a/16/modex105/DEMOS/QB45/UTILS.BI b/16/modex105/DEMOS/QB45/UTILS.BI deleted file mode 100755 index aeafeef4..00000000 --- a/16/modex105/DEMOS/QB45/UTILS.BI +++ /dev/null @@ -1,51 +0,0 @@ - - ' Misc Constants - -CONST True = -1, False = 0, nil = 0 - - ' Keyboard Codes: Extended - -CONST KyF1 = &H3B00, KyF2 = &H3C00, KyF3 = &H3D00, KyF4 = &H3E00, KyF5 = &H3F00 -CONST KyF6 = &H4000, KyF7 = &H4100, KyF8 = &H4200, KyF9 = &H4300, KyF10 = &H4400 - -CONST KyUp = &H4800, KyLeft = &H4B00, KyRight = &H4D00, KyDown = &H5000 -CONST KySLeft = &HCB00, KySRight = &HCD00, KySUp = &HC800, KySDown = &HD000 - -CONST KyHome = &H4700, KyPgUp = &H4900, KyEnd = &H4F00, KyPgDn = &H5100 -CONST KySHome = &HC700, KySPgUp = &HC900, KySEnd = &HCF00, KySPgDn = &HD100 - -CONST KyIns = &H5200, KyDel = &H5300, KyRvsTab = &H8F00 -CONST KySIns = &HC200, KySDel = &HC300 - -CONST KyAltA = &H1E00, KyAltB = &H3000, KyAltC = &H2E00, KyAltD = &H2000 -CONST KyAltE = &H1200, KyAltF = &H2100, KyAltG = &H2200, KyAltH = &H2300 -CONST KyAltI = &H1700, KyAltJ = &H2400, KyAltK = &H2500, KyAltL = &H2600 -CONST KyAltM = &H3200, KyAltN = &H3100, KyAltO = &H1800, KyAltP = &H1900 -CONST KyAltQ = &H1000, KyAltR = &H1300, KyAltS = &H1F00, KyAltT = &H1400 -CONST KyAltU = &H1600, KyAltV = &H2F00, KyAltW = &H1100, KyAltX = &H2D00 -CONST KyAltY = &H1500, KyAltZ = &H2C00 - - ' Keyboard Codes: Ascii - -CONST KyBS = 8, KyTab = 9, KyCR = 13, KyESC = &H1B, KyClr = &H7F -CONST KyPlus = 45, KyMinus = 43 - - ' Color Constants - -CONST c.BLACK = 0, c.BLUE = 1, c.GREEN = 2, c.CYAN = 3 -CONST c.RED = 4, c.PURPLE = 5, c.BROWN = 6, c.WHITE = 7 -CONST c.GREY = 8, c.bBLUE = 9, c.bGREEN = 10, c.bCYAN = 11 -CONST c.bRED = 12, c.bPURPLE = 13, c.YELLOW = 14, c.bWHITE = 15 -CONST c.BRIGHT = 8 - - ' From UTILS.ASM - -DECLARE SUB DOS.PRINT ALIAS "DOS_PRINT" (Text$) -DECLARE SUB DOS.PRINTS ALIAS "DOS_PRINTS" (Text$) -DECLARE SUB SET.VIDEO.MODE ALIAS "SET_VIDEO_MODE" (BYVAL Mode%) -DECLARE FUNCTION SCAN.KEYBOARD% ALIAS "SCAN_KEYBOARD" -DECLARE FUNCTION RANDOM.INT ALIAS "RANDOM_INT" (BYVAL MaxInt%) -DECLARE SUB INIT.RANDOM ALIAS "INIT_RANDOM" -DECLARE FUNCTION TIMER.COUNT& ALIAS "TIMER_COUNT" -DECLARE FUNCTION INT.SQR ALIAS "INT_SQR" (BYVAL X%, BYVAL Round%) - diff --git a/16/modex105/DEMOS/ROM_8X8.FNT b/16/modex105/DEMOS/ROM_8X8.FNT deleted file mode 100755 index 708a4f924815cedc3c5e179b42a7cc9d9c492625..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024 zcmYLIv1%hR5FJwF8j-jZ*rdt_40l(kSRBY_q!RI=OQFJ*5!~J;?(YN6A8>zgZD7H$ zl}MQ;#%yJGAywF7(cT+v;KsRcaNHt(pu$~WyMl)8=J9c}9nL?U|BNw)!Z}yyN?(1sVqU(r_lx_* z;`^cA+!V)SakF`7yVSK0baFON^RpA6R$5nu#x>{2(f!NIkLh$u^M&!=#30pHRh8oq zHspA%Nkd?xER_@#u}zjGx~}U4b?F9o35^S=RtnGI*k$1mn2E`IpKb3GexA6jgX#d( zM9r=tTkt=Yl`K+UPLB$(m&}q! zOTT5a-|y={41hjH>YXc{>oHF7hIw`#bMPId+q-agn?`Nl^7)gS6K0HSk-#1#(1k*o zsOR8(@a`b&LwagnQ+jS1Y7X!FCurlFrtv1{v%o|8xC^sv%e@fWVQK3c#zL2$y)^hxh42f59a)vzx6a@ZkcEDUF0PO NT(pwbM1+VY(Lc=|finOA diff --git a/16/modex105/DEMOS/SPACEAGE.FNT b/16/modex105/DEMOS/SPACEAGE.FNT deleted file mode 100755 index 029bae4effb181a29f61b17c588cd848bc04e82a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024 zcmYLHJ!|7Y5SbOEUxqr5pFqLs>t~iV;RY!1j zs1T!jZ)J0X<+nTE^JYaBxj=YYL5MSiNTH5);!SAhnReQ4LLJYv6KTJliL?`M0<-sY zlBTX3z-|rM$^0|Re0Tq_dU}1IKT>}gC!1%R#!H_*=J(g9)x-T=89OV>Qc7Q0<$+~s zT?B^K+E5~)uWJ_Y^?HqizX~+}2c+5i7$wSfTjM6OHRDgBC36-M>lO%e$Zv$loio%!zj=P}rObnQjD6ug80Nsfe_-MHKA77r{sZ_H5+LHR z+TvT2QYL`;Fy2UiFu>AN=7IUiA5jg2X2e2eWB~Ob0QN8~c`@PQf5`LWp@9I#X99p= h7cUiYAi$&vVG}~bcO~qr4Z(-d%J<)JrH}|U`3JE0#Z>?R diff --git a/16/modex105/DEMOS/SYSTEM.FNT b/16/modex105/DEMOS/SYSTEM.FNT deleted file mode 100755 index 9a1965ebfe5bd67bea71c313ef7ef2f78aa6fbb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024 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 Ix?}Ob0HE06asU7T diff --git a/16/modex105/FONTEDIT/CHARSETS.CS b/16/modex105/FONTEDIT/CHARSETS.CS deleted file mode 100755 index 97fe608ff81e4b78105a52984687b21a8a166ff7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2144 zcmZuxJ!l+96n;6MS4UXnt-=-}41|Eng%sK1kQZ45l?FE{#|SwoHp$@#voXtha@dX{ zQYfmTCagt@!<7qF0>fazkYW)cg-{{Pq!F&fRpE+dlJCu4ehhhcyPv){@Bht-sFQSU z?`Ur=rF3mP9s`G~&wl*=$?EXx>WcWGqImeQw?g*Kn|B$j<8L9yRdu}o^5y<<<={3R zJ91BVemh_^&-b1i&-V^qIlB4L%_JF3?W2uH8ylZp>f!4Cv;EZ}DLZpBtEjiQ;#L-W z6c4L7u75%mXAG#CsbTFza*OjM2!4p3-Wj(2t#=j~I%LJ8fw*LYP9bC>57Rj1{9ZA7Mt z6KS4Onx_vgng8 z5ChN7E_A{E#u-DcG5iJBS|ct9q$P*ET4SFcHJ_hw-p*IT;K*e|=JU&VGnr1~~8H#+(P@Jm%Ot$eFuBJd>w6;$lt( zZ_xR{Vt$gPB+U&6Ju11bu*7}I%|Ck}`V-5W(=w<`MO-ZROI!i+W5yLm>$%e<4W%p) z7`$kjGQ>J~AGk9ZCWI)&)d=%cYd-+8T!t)QpYs5Kexkqot2Z4Fs z`R41b%`e0!UwyeH{!fS&ZY*{lZ@m|a$Iauzf)uuYju0V`tBS9351aLIx zKoYE`puPCvqHV#G^>wrnw9VmR)6&9HxV5`0DPT3nNkt;8{TC0{5AmfyPur=6UpQ=s zxYo!wnILk%u4}5ni%GGJ-#Ow4ghL)og!7>;E{stKtVwWvI2Xw*@hE4KQLFRa)0hVH z{}+J}BY08(?-3mP)Jab%MT$7DR|L0b_`tuYN6S;-uczYEpKvZ!rX1M!Z2JyuC%E7IvA=GDa(`>QD+soN|ACXgvqk-8t6F z`g+b`2YrteKAa~bA0JsVwj+xV5RCQLr_l%|@VE1Ph*N`Wpk_V#vYyv-u06L(E9KAY zn$Pj}eir>RM^&{1s#<$J!mwX3n@lF#&_nC>86X2k^*$bR_5;^75OWrqIpVS%j_3Kj zU$BjM*bnsZ?9kg;v}e&js#Nd~5GEQhM;P#a24hIyzo+2B|8*@NyU3c zKhoDl(t4iF`zI7CEZbYo-&2HyY)=?K#(E3@obyW5K^Oq{Pa2IdqU?;31F1O*Ao42S zpH^MH76I4}Zg!5~0c~&l{;AHgn)NV{g3yP^a9{fpdzW07LSf8BB*6Q(VGO|>EaR=u c@7}+=v9)<$+}Yd`AAF4Uy(KWY!FGSkU-|#d0ssI2 diff --git a/16/modex105/FONTEDIT/CSEDIT.DOC b/16/modex105/FONTEDIT/CSEDIT.DOC deleted file mode 100755 index 97ff07e0..00000000 --- a/16/modex105/FONTEDIT/CSEDIT.DOC +++ /dev/null @@ -1,196 +0,0 @@ - -CSEDIT - A Simple Font Editor by Matt Pritchard - - -CSEDIT is distributed with MODEXnnn.ZIP, the general purpose MODE X -Library for VGA Graphics. - -WHAT YOU NEED TO RUN CSEDIT: - - * A Vga Monitor - * A Microsoft Compatible Mouse - - A Mouse is most definitely required, as the keyboard is used for - nothing except entering file names. - -FILES NEEDED IN THE CURRENT DIRECTORY: - - CSEDIT.EXE - The Font Editor Program - CHARSETS.CS - The Font Editor's Internal Fonts - PALETTE.CS - The Font Editor's Palette - MOUSEIMG.CS - The Font Editor's Mouse Pointer - -SAMPLE FONT FILE THAT SHOULD BE INCLUDED: - - SYSTEM.FNT - The Font used by CSEDIT.EXE - INVERSE.FNT - An Inverted version of SYSTEM.FNT - SPACEAGE.FNT - A Futuristic, Tech style font - ROM_8X8.FNT - The Lower 128 characters from the VGA BIOS Rom - -WHAT IT EDITS: - - 8 by 8 character fonts, 128 characters at a time. 2 fonts at a time. - -HOW IT WORKS/FEATURES: - - CSEDIT allows the user to edit 2 different font groups at a time, - which may be loaded and saved separately. - - A enlarged character grid allows the user to edit individual pixels - on a selected character. - - The Following operations can be performed on a single character or - simultaneously on a selected block of characters. - - * Shift the selected character(s) in any direction - with or without clipping at the edges. - * Vertically Flip the selected character(s) - * Horizontally Flip the selected character(s) - * Rotate the selected character(s) 90 Degrees Clockwise - * Rotate the selected character(s) 90 Degrees Counterclockwise - * Clear the selected character(s) - * Invert the selected character(s) - * XOR the selected character(s) with other character(s) - * AND the selected character(s) with other character(s) - * OR the selected character(s) with other character(s) - * Copy the selected character(s) to another position or font. - - An UNDO feature allows the reversal of the most recent operation. - -DESCRIPTION OF OBJECTS/FEATURES FROM THE TOP DOWN: - - Character Grid: (RED) Box in Upper Left corner of screen. This is - where you edit an individual character. The Left Button sets the - pixel the mouse pointer is on, while the Right Button clears that - pixel. - - Scroll Buttons: The Four Scroll Buttons are labeled with directional - arrows, and arranged in a diamond pattern. Left Clicking on a - directional button will scroll the currently selected character - in that direction, with the pixels on the edge rolling off and - appearing on the other size. Right Clicking will prevent the - pixels from rolling to the other side. - - Vertical Flip Button: - Horizontal Flip Button: Clicking these buttons will flip the pattern - of the currently selected character(s) around the indicated axis. - i.e. the top row will be swapped with the bottom row, etc. or the - left row column will be swapped with right column, etc. - depending upon which button you push. - - Invert Button: Clicking this button causes all pixels in the selected - character(s) to flip flop between on and off. - - Clear Button: Clicking this button erases the selected characters - - Rotate Buttons: Clicking these buttons will rotate the pattern in the - selected character(s) 90 degrees in the indicated direction. - - XOR Button: Clicking this button will let you XOR the currently - selected character(s) with other character(s) in either font. - The Button will turn RED, indicating that it is waiting for - you to click on the desired character (or upper left corner - of the desired block of characters) in either the Red or Green - Character Set Displays. Clicking anywhere else will abort this - process without doing anything. If you click on (any of) the - selected character(s) the operation is aborted. If a block is - selected and the character you click on is in a position where - it can't represent the upper left corner of a block of the same - size, then the operation is not performed. - - AND Button & OR Button: These buttons work just like the XOR Button - except that the Binary operation performed is either an AND or OR - depending upon which button you have selected. - - COPY Button: This button lets you copy a character or selected block - of characters to another area in the current font or the other - font. After clicking, the button turns RED and works much like - the XOR Button. Clicking on a valid position in either font - window will copy the selected character(s) to that location. - - MODE Button: Clicking this button toggles the editor between BLOCK - mode and CHARACTER mode. The current mode is displayed on a plate - at the top of the screen, just to the right of the enlarged - character grid. In character mode the plate will read "CHAR" and - the currently selected character is displayed just to the right - of the plate. In Block mode the plate will read "BLOCK" and the - enlarged character grid is disabled. - - UNDO Button: Clicking this Button will UNDO or reverse the effects of - the most recent operation. - - QUIT Button: Clicking this button will return you to DOS. Any loaded - fonts are not saved, and no confirmation is given. - - - GREEN FONT AREA: This area displays one of the current fonts which - can be edited. The characters are display in order from #0 to #127 - from the upper left, going right, then down. The Font Box is 32 - characters wide and 4 characters Tall. When the editor is in - character mode, just point at and Left Click on the character you - wish to edit and a Cyan box will appear around that character. - - * If you Right Click on a character, the last current character, - which will still appear in the enlarged character grid, will be - copied onto the character you pointed at, replacing it. This is - a shortcut for copying characters: You can hold the right button - down an fill in a large area with a single character pattern. - When the editor is in Block Mode, you select an area by clicking - on any corner of the desired block. Then drag the mouse to the - opposite corner while holding down the left button. A Cyan Box - will stretch to surround the selected block of characters. - - GREEN FONT FILE NAME BOX: This Text Box is used to enter the name - of a font file to load or the name to save the current Green font - as. Just click on the Box, and it will change color and a - flashing cursor will appear. Now you type in a filename or edit - the existing filename. Press or click outside the text - box to end editing. - - GREEN FONT LOAD BUTTON: Clicking this button will load the font file - that is named in the Green File name box. If no name is given or - no such file exists, then nothing will be loaded. - - GREEN FONT SAVE BUTTON: Clicking this button will save the current - font in the Green Font Area under the name given in the File Name - Box. If a Valid name is not provided, nothing will be saved. - - RED FONT AREA: This is just the same as the GREEN FONT AREA; providing - you with the ability to copy and edit between multiple fonts. - - RED FONT FILE NAME BOX: This works just like the GREEN FONT FILE - NAME BOX. - - RED FONT LOAD BUTTON: This works just like the GREEN FONT LOAD BUTTON. - - RED FONT SAVE BUTTON: This works just like the GREEN FONT SAVE BUTTON. - - Message Bar: At the very bottom of the screen, this Bar will display - information and messages for various functions. - - -FONT FILE FORMAT: - - BINARY Image, in order of character. The format is identical to that - used by the VGA ROM. The Files will be exactly 1024 (128 * 8) bytes - long. - - CHARACTER: 8 Bytes - - FONT: Array (0 to 127) of CHARACTER - - -COMMENTS, QUESTIONS, BUG REPORTS, etc: - - Send the to the Author: Matt Pritchard - - Through the 80xxx Fidonet Echo or - - Matt Pritchard - P.O. Box 140264 - Irving, TX 75014 - -CREDITS: - - This Font Editor was written in QuickBASIC 4.5 - diff --git a/16/modex105/FONTEDIT/CSEDIT.EXE b/16/modex105/FONTEDIT/CSEDIT.EXE deleted file mode 100755 index 58b073253ada69b3f089a2f3b359049195178db6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68368 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 diff --git a/16/modex105/FONTEDIT/PALETTE.CS b/16/modex105/FONTEDIT/PALETTE.CS deleted file mode 100755 index 09c5549e4967dcb520ae894bd5116c0b530b4304..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 zcmZva!HUBm5J2Y=2%RO`noI*WHGwcK1qscTHe1-8|NpDio)pxF%6pnq0K&M13AbBZ z!q&xO7l(w|iNxizg=4r~RaITrh}bmEe!p+qw(tAX=`@bxJkQtb)qB6L>$Yv5`=UV{ z$O7SUU=eTvI(#S%i7f}`l?a`0a6UY=gwUL^7s{}g|hJS4Up z0C)#%fCpfX3=D>0$9YI>IT*u7!-L_;Fh?df1Dhk~A+hCPEuSq8G#Fm3nq!k?$b&4p`kvfpll!wHY YgKmDmA2t3h8~nUSZ1J&%-%)-20~L%`_y7O^ diff --git a/16/modex105/FONTEDIT/ROM_8X8.FNT b/16/modex105/FONTEDIT/ROM_8X8.FNT deleted file mode 100755 index 708a4f924815cedc3c5e179b42a7cc9d9c492625..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024 zcmYLIv1%hR5FJwF8j-jZ*rdt_40l(kSRBY_q!RI=OQFJ*5!~J;?(YN6A8>zgZD7H$ zl}MQ;#%yJGAywF7(cT+v;KsRcaNHt(pu$~WyMl)8=J9c}9nL?U|BNw)!Z}yyN?(1sVqU(r_lx_* z;`^cA+!V)SakF`7yVSK0baFON^RpA6R$5nu#x>{2(f!NIkLh$u^M&!=#30pHRh8oq zHspA%Nkd?xER_@#u}zjGx~}U4b?F9o35^S=RtnGI*k$1mn2E`IpKb3GexA6jgX#d( zM9r=tTkt=Yl`K+UPLB$(m&}q! zOTT5a-|y={41hjH>YXc{>oHF7hIw`#bMPId+q-agn?`Nl^7)gS6K0HSk-#1#(1k*o zsOR8(@a`b&LwagnQ+jS1Y7X!FCurlFrtv1{v%o|8xC^sv%e@fWVQK3c#zL2$y)^hxh42f59a)vzx6a@ZkcEDUF0PO NT(pwbM1+VY(Lc=|finOA diff --git a/16/modex105/FONTEDIT/SPACEAGE.FNT b/16/modex105/FONTEDIT/SPACEAGE.FNT deleted file mode 100755 index 029bae4effb181a29f61b17c588cd848bc04e82a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024 zcmYLHJ!|7Y5SbOEUxqr5pFqLs>t~iV;RY!1j zs1T!jZ)J0X<+nTE^JYaBxj=YYL5MSiNTH5);!SAhnReQ4LLJYv6KTJliL?`M0<-sY zlBTX3z-|rM$^0|Re0Tq_dU}1IKT>}gC!1%R#!H_*=J(g9)x-T=89OV>Qc7Q0<$+~s zT?B^K+E5~)uWJ_Y^?HqizX~+}2c+5i7$wSfTjM6OHRDgBC36-M>lO%e$Zv$loio%!zj=P}rObnQjD6ug80Nsfe_-MHKA77r{sZ_H5+LHR z+TvT2QYL`;Fy2UiFu>AN=7IUiA5jg2X2e2eWB~Ob0QN8~c`@PQf5`LWp@9I#X99p= h7cUiYAi$&vVG}~bcO~qr4Z(-d%J<)JrH}|U`3JE0#Z>?R diff --git a/16/modex105/FONTEDIT/SYSTEM.FNT b/16/modex105/FONTEDIT/SYSTEM.FNT deleted file mode 100755 index 9a1965ebfe5bd67bea71c313ef7ef2f78aa6fbb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024 zcmYjPv1%JZ5PcEm5aBRag)K}-6L5KuW{X1(ia+GQkTh4gGKX2#%0V3BF6z_-EK>Os z1ct?etqu`V2p7gEjd3Mh1sBIAZ&oH`(CIO|J8x#*46rf1Kc0>EHS~VdG{ji+(@pq+oD&8?kJE-xo@8yMC!0paxQ=Ty*Nj4yoj$J48Ty*GP# ze)zCDIXF2u_;BZn;pBWWEHGL zCiv7oaxvt1|Gte!6`zNyLS}!M7hMM5s=V~4(3L*AX^)VmD!xk<<5UWMJj#Je2VL=s zU8v0yki6tchyn7)OzbN!-3Z3}rS}F(E1IP*7lD}UBs_21Hjo*ebB}3Tqb9b*;1e;4 zm!F_b61GF`|GrY#q`sJ*6^O$l;b#YmxLn@2TH<~19-a5{qwky}FCAKkz`V|Jo)Mkg zFC_0K%!AFw`d_kGsnfUD57(^+S!f;nI4wE_}=<@sf-WqJO)v(U&;#n}qip zUL|>GA!5b3(^-Z!`Fy1-@=~W-CK#fy)UOmXaMEzngOR#Y!+ojzzc~PZIJ_sU8jcVcNPyf^0GVeOHxtq!b&Xha#_W6, ; If DX not setup - MOV DX, Register ; then Select Register - ENDIF - IFDIFI , ; If AX not setup - MOV AX, Value ; then Get Data Value - ENDIF - OUT DX, AX ; Set I/O Register(s) -ENDM - - ; Macro to OUT a 8 bit value to an I/O Port - -OUT_8 MACRO Register, Value - IFDIFI , ; If DX not setup - MOV DX, Register ; then Select Register - ENDIF - IFDIFI , ; If AL not Setup - MOV AL, Value ; then Get Data Value - ENDIF - OUT DX, AL ; Set I/O Register -ENDM - - ; macros to PUSH and POP multiple registers - -PUSHx MACRO R1, R2, R3, R4, R5, R6, R7, R8 - IFNB - PUSH R1 ; Save R1 - PUSHx R2, R3, R4, R5, R6, R7, R8 - ENDIF -ENDM - -POPx MACRO R1, R2, R3, R4, R5, R6, R7, R8 - IFNB - POP R1 ; Restore R1 - POPx R2, R3, R4, R5, R6, R7, R8 - ENDIF -ENDM - - ; Macro to Clear Registers to 0 - -CLR MACRO Register, R2, R3, R4, R5, R6 - IFNB - XOR Register, Register ; Set Register = 0 - CLR R2, R3, R4, R5, R6 - ENDIF -ENDM - - ; Macros to Decrement Counter & Jump on Condition - -LOOPx MACRO Register, Destination - DEC Register ; Counter-- - JNZ Destination ; Jump if not 0 -ENDM - -LOOPjz MACRO Register, Destination - DEC Register ; Counter-- - JZ Destination ; Jump if 0 -ENDM - - - ; ===== General Constants ===== - - False EQU 0 - True EQU -1 - nil EQU 0 - - b EQU BYTE PTR - w EQU WORD PTR - d EQU DWORD PTR - o EQU OFFSET - f EQU FAR PTR - s EQU SHORT - ?x4 EQU - ?x3 EQU - - ; ===== VGA Register Values ===== - - VGA_Segment EQU 0A000h ; Vga Memory Segment - - ATTRIB_Ctrl EQU 03C0h ; VGA Attribute Controller - GC_Index EQU 03CEh ; VGA Graphics Controller - SC_Index EQU 03C4h ; VGA Sequencer Controller - SC_Data EQU 03C5h ; VGA Sequencer Data Port - CRTC_Index EQU 03D4h ; VGA CRT Controller - CRTC_Data EQU 03D5h ; VGA CRT Controller Data - MISC_OUTPUT EQU 03C2h ; VGA Misc Register - INPUT_1 EQU 03DAh ; Input Status #1 Register - - DAC_WRITE_ADDR EQU 03C8h ; VGA DAC Write Addr Register - DAC_READ_ADDR EQU 03C7h ; VGA DAC Read Addr Register - PEL_DATA_REG EQU 03C9h ; VGA DAC/PEL data Register R/W - - PIXEL_PAN_REG EQU 033h ; Attrib Index: Pixel Pan Reg - MAP_MASK EQU 002h ; Sequ Index: Write Map Mask reg - READ_MAP EQU 004h ; GC Index: Read Map Register - START_DISP_HI EQU 00Ch ; CRTC Index: Display Start Hi - START_DISP_LO EQU 00Dh ; CRTC Index: Display Start Lo - - MAP_MASK_PLANE1 EQU 00102h ; Map Register + Plane 1 - MAP_MASK_PLANE2 EQU 01102h ; Map Register + Plane 1 - ALL_PLANES_ON EQU 00F02h ; Map Register + All Bit Planes - - CHAIN4_OFF EQU 00604h ; Chain 4 mode Off - ASYNC_RESET EQU 00100h ; (A)synchronous Reset - SEQU_RESTART EQU 00300h ; Sequencer Restart - - LATCHES_ON EQU 00008h ; Bit Mask + Data from Latches - LATCHES_OFF EQU 0FF08h ; Bit Mask + Data from CPU - - VERT_RETRACE EQU 08h ; INPUT_1: Vertical Retrace Bit - PLANE_BITS EQU 03h ; Bits 0-1 of Xpos = Plane # - ALL_PLANES EQU 0Fh ; All Bit Planes Selected - CHAR_BITS EQU 0Fh ; Bits 0-3 of Character Data - - GET_CHAR_PTR EQU 01130h ; VGA BIOS Func: Get Char Set - ROM_8x8_Lo EQU 03h ; ROM 8x8 Char Set Lo Pointer - ROM_8x8_Hi EQU 04h ; ROM 8x8 Char Set Hi Pointer - - ; Constants Specific for these routines - - NUM_MODES EQU 8 ; # of Mode X Variations - - ; Specific Mode Data Table format... - -Mode_Data_Table STRUC - M_MiscR DB ? ; Value of MISC_OUTPUT register - M_Pages DB ? ; Maximum Possible # of pages - M_XSize DW ? ; X Size Displayed on screen - M_YSize DW ? ; Y Size Displayed on screen - M_XMax DW ? ; Maximum Possible X Size - M_YMax DW ? ; Maximum Possible Y Size - M_CRTC DW ? ; Table of CRTC register values -Mode_Data_Table ENDS - - ; ===== DGROUP STORAGE NEEDED (42 BYTES) ===== - - .DATA? - -SCREEN_WIDTH DW 0 ; Width of a line in Bytes -SCREEN_HEIGHT DW 0 ; Vertical Height in Pixels - -LAST_PAGE DW 0 ; # of Display Pages -PAGE_ADDR DW 4 DUP (0) ; Offsets to start of each page - -PAGE_SIZE DW 0 ; Size of Page in Addr Bytes - -DISPLAY_PAGE DW 0 ; Page # currently displayed -ACTIVE_PAGE DW 0 ; Page # currently active - -CURRENT_PAGE DW 0 ; Offset of current Page -CURRENT_SEGMENT DW 0 ; Segment of VGA memory - -CURRENT_XOFFSET DW 0 ; Current Display X Offset -CURRENT_YOFFSET DW 0 ; Current Display Y Offset - -CURRENT_MOFFSET DW 0 ; Current Start Offset - -MAX_XOFFSET DW 0 ; Current Display X Offset -MAX_YOFFSET DW 0 ; Current Display Y Offset - -CHARSET_LOW DW 0, 0 ; Far Ptr to Char Set: 0-127 -CHARSET_HI DW 0, 0 ; Far Ptr to Char Set: 128-255 - - .CODE - - ; ===== DATA TABLES ===== - - ; Data Tables, Put in Code Segment for Easy Access - ; (Like when all the other Segment Registers are in - ; use!!) and reduced DGROUP requirements... - - ; Bit Mask Tables for Left/Right/Character Masks - -Left_Clip_Mask DB 0FH, 0EH, 0CH, 08H - -Right_Clip_Mask DB 01H, 03H, 07H, 0FH - - ; Bit Patterns for converting character fonts - -Char_Plane_Data DB 00H,08H,04H,0CH,02H,0AH,06H,0EH - DB 01H,09H,05H,0DH,03H,0BH,07H,0FH - - ; CRTC Register Values for Various Configurations - -MODE_Single_Line: ; CRTC Setup Data for 400/480 Line modes - DW 04009H ; Cell Height (1 Scan Line) - DW 00014H ; Dword Mode off - DW 0E317H ; turn on Byte Mode - DW nil ; End of CRTC Data for 400/480 Line Mode - -MODE_Double_Line: ; CRTC Setup Data for 200/240 Line modes - DW 04109H ; Cell Height (2 Scan Lines) - DW 00014H ; Dword Mode off - DW 0E317H ; turn on Byte Mode - DW nil ; End of CRTC Data for 200/240 Line Mode - -MODE_320_Wide: ; CRTC Setup Data for 320 Horz Pixels - DW 05F00H ; Horz total - DW 04F01H ; Horz Displayed - DW 05002H ; Start Horz Blanking - DW 08203H ; End Horz Blanking - DW 05404H ; Start H Sync - DW 08005H ; End H Sync - DW nil ; End of CRTC Data for 320 Horz pixels - -MODE_360_Wide: ; CRTC Setup Data for 360 Horz Pixels - DW 06B00H ; Horz total - DW 05901H ; Horz Displayed - DW 05A02H ; Start Horz Blanking - DW 08E03H ; End Horz Blanking - DW 05E04H ; Start H Sync - DW 08A05H ; End H Sync - DW nil ; End of CRTC Data for 360 Horz pixels - -MODE_200_Tall: -MODE_400_Tall: ; CRTC Setup Data for 200/400 Line modes - DW 0BF06H ; Vertical Total - DW 01F07H ; Overflow - DW 09C10H ; V Sync Start - DW 08E11H ; V Sync End/Prot Cr0 Cr7 - DW 08F12H ; Vertical Displayed - DW 09615H ; V Blank Start - DW 0B916H ; V Blank End - DW nil ; End of CRTC Data for 200/400 Lines - -MODE_240_Tall: -MODE_480_Tall: ; CRTC Setup Data for 240/480 Line modes - DW 00D06H ; Vertical Total - DW 03E07H ; Overflow - DW 0EA10H ; V Sync Start - DW 08C11H ; V Sync End/Prot Cr0 Cr7 - DW 0DF12H ; Vertical Displayed - DW 0E715H ; V Blank Start - DW 00616H ; V Blank End - DW nil ; End of CRTC Data for 240/480 Lines - - ; Table of Display Mode Tables - -MODE_TABLE: - DW o MODE_320x200, o MODE_320x400 - DW o MODE_360x200, o MODE_360x400 - DW o MODE_320x240, o MODE_320x480 - DW o MODE_360x240, o MODE_360x480 - - ; Table of Display Mode Components - -MODE_320x200: ; Data for 320 by 200 Pixels - - DB 063h ; 400 scan Lines & 25 Mhz Clock - DB 4 ; Maximum of 4 Pages - DW 320, 200 ; Displayed Pixels (X,Y) - DW 1302, 816 ; Max Possible X and Y Sizes - - DW o MODE_320_Wide, o MODE_200_Tall - DW o MODE_Double_Line, nil - -MODE_320x400: ; Data for 320 by 400 Pixels - - DB 063h ; 400 scan Lines & 25 Mhz Clock - DB 2 ; Maximum of 2 Pages - DW 320, 400 ; Displayed Pixels X,Y - DW 648, 816 ; Max Possible X and Y Sizes - - DW o MODE_320_Wide, o MODE_400_Tall - DW o MODE_Single_Line, nil - -MODE_360x240: ; Data for 360 by 240 Pixels - - DB 0E7h ; 480 scan Lines & 28 Mhz Clock - DB 3 ; Maximum of 3 Pages - DW 360, 240 ; Displayed Pixels X,Y - DW 1092, 728 ; Max Possible X and Y Sizes - - DW o MODE_360_Wide, o MODE_240_Tall - DW o MODE_Double_Line , nil - -MODE_360x480: ; Data for 360 by 480 Pixels - - DB 0E7h ; 480 scan Lines & 28 Mhz Clock - DB 1 ; Only 1 Page Possible - DW 360, 480 ; Displayed Pixels X,Y - DW 544, 728 ; Max Possible X and Y Sizes - - DW o MODE_360_Wide, o MODE_480_Tall - DW o MODE_Single_Line , nil - -MODE_320x240: ; Data for 320 by 240 Pixels - - DB 0E3h ; 480 scan Lines & 25 Mhz Clock - DB 3 ; Maximum of 3 Pages - DW 320, 240 ; Displayed Pixels X,Y - DW 1088, 818 ; Max Possible X and Y Sizes - - DW o MODE_320_Wide, o MODE_240_Tall - DW o MODE_Double_Line, nil - -MODE_320x480: ; Data for 320 by 480 Pixels - - DB 0E3h ; 480 scan Lines & 25 Mhz Clock - DB 1 ; Only 1 Page Possible - DW 320, 480 ; Displayed Pixels X,Y - DW 540, 818 ; Max Possible X and Y Sizes - - DW o MODE_320_WIDE, o MODE_480_Tall - DW o MODE_Single_Line, nil - -MODE_360x200: ; Data for 360 by 200 Pixels - - DB 067h ; 400 scan Lines & 28 Mhz Clock - DB 3 ; Maximum of 3 Pages - DW 360, 200 ; Displayed Pixels (X,Y) - DW 1302, 728 ; Max Possible X and Y Sizes - - DW o MODE_360_Wide, MODE_200_Tall - DW o MODE_Double_Line, nil - -MODE_360x400: ; Data for 360 by 400 Pixels - - DB 067h ; 400 scan Lines & 28 Mhz Clock - DB 1 ; Maximum of 1 Pages - DW 360, 400 ; Displayed Pixels X,Y - DW 648, 816 ; Max Possible X and Y Sizes - - DW o MODE_360_Wide, MODE_400_Tall - DW o MODE_Single_Line, nil - - - ; ===== MODE X SETUP ROUTINES ===== - -;====================================================== -;SET_VGA_MODEX% (ModeType%, MaxXPos%, MaxYpos%, Pages%) -;====================================================== -; -; Sets Up the specified version of Mode X. Allows for -; the setup of multiple video pages, and a virtual -; screen which can be larger than the displayed screen -; (which can then be scrolled a pixel at a time) -; -; ENTRY: ModeType = Desired Screen Resolution (0-7) -; -; 0 = 320 x 200, 4 Pages max, 1.2:1 Aspect Ratio -; 1 = 320 x 400, 2 Pages max, 2.4:1 Aspect Ratio -; 2 = 360 x 200, 3 Pages max, 1.35:1 Aspect Ratio -; 3 = 360 x 400, 1 Page max, 2.7:1 Aspect Ratio -; 4 = 320 x 240, 3 Pages max, 1:1 Aspect Ratio -; 5 = 320 x 480, 1 Page max, 2:1 Aspect Ratio -; 6 = 360 x 240, 3 Pages max, 1.125:1 Aspect Ratio -; 7 = 360 x 480, 1 Page max, 2.25:1 Aspect Ratio -; -; MaxXpos = The Desired Virtual Screen Width -; MaxYpos = The Desired Virtual Screen Height -; Pages = The Desired # of Video Pages -; -; EXIT: AX = Success Flag: 0 = Failure / -1= Success -; - -SVM_STACK STRUC - SVM_Table DW ? ; Offset of Mode Info Table - DW ?x4 ; DI, SI, DS, BP - DD ? ; Caller - SVM_Pages DW ? ; # of Screen Pages desired - SVM_Ysize DW ? ; Vertical Screen Size Desired - SVM_Xsize DW ? ; Horizontal Screen Size Desired - SVM_Mode DW ? ; Display Resolution Desired -SVM_STACK ENDS - - PUBLIC SET_VGA_MODEX - -SET_VGA_MODEX PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - SUB SP, 2 ; Allocate workspace - MOV BP, SP ; Set up Stack Frame - - ; Check Legality of Mode Request.... - - MOV BX, [BP].SVM_Mode ; Get Requested Mode # - CMP BX, NUM_MODES ; Is it 0..7? - JAE @SVM_BadModeSetup ; If Not, Error out - - SHL BX, 1 ; Scale BX - MOV SI, w MODE_TABLE[BX] ; CS:SI -> Mode Info - MOV [BP].SVM_Table, SI ; Save ptr for later use - - ; Check # of Requested Display Pages - - MOV CX, [BP].SVM_Pages ; Get # of Requested Pages - CLR CH ; Set Hi Word = 0! - CMP CL, CS:[SI].M_Pages ; Check # Pages for mode - JA @SVM_BadModeSetup ; Report Error if too Many Pages - JCXZ @SVM_BadModeSetup ; Report Error if 0 Pages - - ; Check Validity of X Size - - AND [BP].SVM_XSize, 0FFF8h ; X size Mod 8 Must = 0 - - MOV AX, [BP].SVM_XSize ; Get Logical Screen Width - CMP AX, CS:[SI].M_XSize ; Check against Displayed X - JB @SVM_BadModeSetup ; Report Error if too small - CMP AX, CS:[SI].M_XMax ; Check against Max X - JA @SVM_BadModeSetup ; Report Error if too big - - ; Check Validity of Y Size - - MOV BX, [BP].SVM_YSize ; Get Logical Screen Height - CMP BX, CS:[SI].M_YSize ; Check against Displayed Y - JB @SVM_BadModeSetup ; Report Error if too small - CMP BX, CS:[SI].M_YMax ; Check against Max Y - JA @SVM_BadModeSetup ; Report Error if too big - - ; Enough memory to Fit it all? - - SHR AX, 2 ; # of Bytes:Line = XSize/4 - MUL CX ; AX = Bytes/Line * Pages - MUL BX ; DX:AX = Total VGA mem needed - JNO @SVM_Continue ; Exit if Total Size > 256K - - DEC DX ; Was it Exactly 256K??? - OR DX, AX ; (DX = 1, AX = 0000) - JZ @SVM_Continue ; if so, it's valid... - -@SVM_BadModeSetup: - - CLR AX ; Return Value = False - JMP @SVM_Exit ; Normal Exit - -@SVM_Continue: - - MOV AX, 13H ; Start with Mode 13H - INT 10H ; Let BIOS Set Mode - - OUT_16 SC_INDEX, CHAIN4_OFF ; Disable Chain 4 Mode - OUT_16 SC_INDEX, ASYNC_RESET ; (A)synchronous Reset - OUT_8 MISC_OUTPUT, CS:[SI].M_MiscR ; Set New Timing/Size - OUT_16 SC_INDEX, SEQU_RESTART ; Restart Sequencer ... - - OUT_8 CRTC_INDEX, 11H ; Select Vert Retrace End Register - INC DX ; Point to Data - IN AL, DX ; Get Value, Bit 7 = Protect - AND AL, 7FH ; Mask out Write Protect - OUT DX, AL ; And send it back - - MOV DX, CRTC_INDEX ; Vga Crtc Registers - ADD SI, M_CRTC ; SI -> CRTC Parameter Data - - ; Load Tables of CRTC Parameters from List of Tables - -@SVM_Setup_Table: - - MOV DI, CS:[SI] ; Get Pointer to CRTC Data Tbl - ADD SI, 2 ; Point to next Ptr Entry - OR DI, DI ; A nil Ptr means that we have - JZ @SVM_Set_Data ; finished CRTC programming - -@SVM_Setup_CRTC: - MOV AX, CS:[DI] ; Get CRTC Data from Table - ADD DI, 2 ; Advance Pointer - OR AX, AX ; At End of Data Table? - JZ @SVM_Setup_Table ; If so, Exit & get next Table - - OUT DX, AX ; Reprogram VGA CRTC reg - JMP s @SVM_Setup_CRTC ; Process Next Table Entry - - ; Initialize Page & Scroll info, DI = 0 - -@SVM_Set_Data: - MOV DISPLAY_PAGE, DI ; Display Page = 0 - MOV ACTIVE_PAGE, DI ; Active Page = 0 - MOV CURRENT_PAGE, DI ; Current Page (Offset) = 0 - MOV CURRENT_XOFFSET, DI ; Horz Scroll Index = 0 - MOV CURRENT_YOFFSET, DI ; Vert Scroll Index = 0 - MOV CURRENT_MOFFSET, DI ; Memory Scroll Index = 0 - - MOV AX, VGA_SEGMENT ; Segment for VGA memory - MOV CURRENT_SEGMENT, AX ; Save for Future LES's - - ; Set Logical Screen Width, X Scroll and Our Data - - MOV SI, [BP].SVM_Table ; Get Saved Ptr to Mode Info - MOV AX, [BP].SVM_Xsize ; Get Display Width - - MOV CX, AX ; CX = Logical Width - SUB CX, CS:[SI].M_XSize ; CX = Max X Scroll Value - MOV MAX_XOFFSET, CX ; Set Maximum X Scroll - - SHR AX, 2 ; Bytes = Pixels / 4 - MOV SCREEN_WIDTH, AX ; Save Width in Pixels - - SHR AX, 1 ; Offset Value = Bytes / 2 - MOV AH, 13h ; CRTC Offset Register Index - XCHG AL, AH ; Switch format for OUT - OUT DX, AX ; Set VGA CRTC Offset Reg - - ; Setup Data table, Y Scroll, Misc for Other Routines - - MOV AX, [BP].SVM_Ysize ; Get Logical Screen Height - - MOV CX, AX ; CX = Logical Height - SUB BX, CS:[SI].M_YSize ; CX = Max Y Scroll Value - MOV MAX_YOFFSET, CX ; Set Maximum Y Scroll - - MOV SCREEN_HEIGHT, AX ; Save Height in Pixels - MUL SCREEN_WIDTH ; AX = Page Size in Bytes, - MOV PAGE_SIZE, AX ; Save Page Size - - MOV CX, [BP].SVM_Pages ; Get # of Pages - MOV LAST_PAGE, CX ; Save # of Pages - - CLR BX ; Page # = 0 - MOV DX, BX ; Page 0 Offset = 0 - -@SVM_Set_Pages: - - MOV PAGE_ADDR[BX], DX ; Set Page #(BX) Offset - ADD BX, 2 ; Page#++ - ADD DX, AX ; Compute Addr of Next Page - LOOPx CX, @SVM_Set_Pages ; Loop until all Pages Set - - ; Clear VGA Memory - - OUT_16 SC_INDEX, ALL_PLANES_ON ; Select All Planes - LES DI, d CURRENT_PAGE ; -> Start of VGA memory - - CLR AX ; AX = 0 - CLD ; Block Xfer Forwards - MOV CX, 8000H ; 32K * 4 * 2 = 256K - REP STOSW ; Clear dat memory! - - ; Setup Font Pointers - - MOV BH, ROM_8x8_Lo ; Ask for 8x8 Font, 0-127 - MOV AX, GET_CHAR_PTR ; Service to Get Pointer - INT 10h ; Call VGA BIOS - - MOV CHARSET_LOW, BP ; Save Char Set Offset - MOV CHARSET_LOW+2, ES ; Save Char Set Segment - - MOV BH, ROM_8x8_Hi ; Ask for 8x8 Font, 128-255 - MOV AX, GET_CHAR_PTR ; Service to Get Pointer - INT 10h ; Call VGA BIOS - - MOV CHARSET_HI, BP ; Save Char Set Offset - MOV CHARSET_HI+2, ES ; Save Char Set Segment - - MOV AX, True ; Return Success Code - -@SVM_EXIT: - ADD SP, 2 ; Deallocate workspace - POPx DI, SI, DS, BP ; Restore Saved Registers - RET 8 ; Exit & Clean Up Stack - -SET_VGA_MODEX ENDP - - -;================== -;SET_MODEX% (Mode%) -;================== -; -; Quickie Mode Set - Sets Up Mode X to Default Configuration -; -; ENTRY: ModeType = Desired Screen Resolution (0-7) -; (See SET_VGA_MODEX for list) -; -; EXIT: AX = Success Flag: 0 = Failure / -1= Success -; - -SM_STACK STRUC - DW ?,? ; BP, SI - DD ? ; Caller - SM_Mode DW ? ; Desired Screen Resolution -SM_STACK ENDS - - PUBLIC SET_MODEX - -SET_MODEX PROC FAR - - PUSHx BP, SI ; Preserve Important registers - MOV BP, SP ; Set up Stack Frame - - CLR AX ; Assume Failure - MOV BX, [BP].SM_Mode ; Get Desired Mode # - CMP BX, NUM_MODES ; Is it a Valid Mode #? - JAE @SMX_Exit ; If Not, don't Bother - - PUSH BX ; Push Mode Parameter - - SHL BX, 1 ; Scale BX to word Index - MOV SI, w MODE_TABLE[BX] ; CS:SI -> Mode Info - - PUSH CS:[SI].M_XSize ; Push Default X Size - PUSH CS:[SI].M_Ysize ; Push Default Y size - MOV AL, CS:[SI].M_Pages ; Get Default # of Pages - CLR AH ; Hi Byte = 0 - PUSH AX ; Push # Pages - - CALL f SET_VGA_MODEX ; Set up Mode X! - -@SMX_Exit: - POPx SI, BP ; Restore Registers - RET 2 ; Exit & Clean Up Stack - -SET_MODEX ENDP - - - ; ===== BASIC GRAPHICS PRIMITIVES ===== - -;============================ -;CLEAR_VGA_SCREEN (ColorNum%) -;============================ -; -; Clears the active display page -; -; ENTRY: ColorNum = Color Value to fill the page with -; -; EXIT: No meaningful values returned -; - -CVS_STACK STRUC - DW ?,? ; DI, BP - DD ? ; Caller - CVS_COLOR DB ?,? ; Color to Set Screen to -CVS_STACK ENDS - - PUBLIC CLEAR_VGA_SCREEN - -CLEAR_VGA_SCREEN PROC FAR - - PUSHx BP, DI ; Preserve Important Registers - MOV BP, SP ; Set up Stack Frame - - OUT_16 SC_INDEX, ALL_PLANES_ON ; Select All Planes - LES DI, d CURRENT_PAGE ; Point to Active VGA Page - - MOV AL, [BP].CVS_COLOR ; Get Color - MOV AH, AL ; Copy for Word Write - CLD ; Block fill Forwards - - MOV CX, PAGE_SIZE ; Get Size of Page - SHR CX, 1 ; Divide by 2 for Words - REP STOSW ; Block Fill VGA memory - - POPx DI, BP ; Restore Saved Registers - RET 2 ; Exit & Clean Up Stack - -CLEAR_VGA_SCREEN ENDP - - -;=================================== -;SET_POINT (Xpos%, Ypos%, ColorNum%) -;=================================== -; -; Plots a single Pixel on the active display page -; -; ENTRY: Xpos = X position to plot pixel at -; Ypos = Y position to plot pixel at -; ColorNum = Color to plot pixel with -; -; EXIT: No meaningful values returned -; - -SP_STACK STRUC - DW ?,? ; BP, DI - DD ? ; Caller - SETP_Color DB ?,? ; Color of Point to Plot - SETP_Ypos DW ? ; Y pos of Point to Plot - SETP_Xpos DW ? ; X pos of Point to Plot -SP_STACK ENDS - - PUBLIC SET_POINT - -SET_POINT PROC FAR - - PUSHx BP, DI ; Preserve Registers - MOV BP, SP ; Set up Stack Frame - - LES DI, d CURRENT_PAGE ; Point to Active VGA Page - - MOV AX, [BP].SETP_Ypos ; Get Line # of Pixel - MUL SCREEN_WIDTH ; Get Offset to Start of Line - - MOV BX, [BP].SETP_Xpos ; Get Xpos - MOV CX, BX ; Copy to extract Plane # from - SHR BX, 2 ; X offset (Bytes) = Xpos/4 - ADD BX, AX ; Offset = Width*Ypos + Xpos/4 - - MOV AX, MAP_MASK_PLANE1 ; Map Mask & Plane Select Register - AND CL, PLANE_BITS ; Get Plane Bits - SHL AH, CL ; Get Plane Select Value - OUT_16 SC_Index, AX ; Select Plane - - MOV AL,[BP].SETP_Color ; Get Pixel Color - MOV ES:[DI+BX], AL ; Draw Pixel - - POPx DI, BP ; Restore Saved Registers - RET 6 ; Exit and Clean up Stack - -SET_POINT ENDP - - -;========================== -;READ_POINT% (Xpos%, Ypos%) -;========================== -; -; Read the color of a pixel from the Active Display Page -; -; ENTRY: Xpos = X position of pixel to read -; Ypos = Y position of pixel to read -; -; EXIT: AX = Color of Pixel at (Xpos, Ypos) -; - -RP_STACK STRUC - DW ?,? ; BP, DI - DD ? ; Caller - RP_Ypos DW ? ; Y pos of Point to Read - RP_Xpos DW ? ; X pos of Point to Read -RP_STACK ENDS - - PUBLIC READ_POINT - -READ_POINT PROC FAR - - PUSHx BP, DI ; Preserve Registers - MOV BP, SP ; Set up Stack Frame - - LES DI, d CURRENT_PAGE ; Point to Active VGA Page - - MOV AX, [BP].RP_Ypos ; Get Line # of Pixel - MUL SCREEN_WIDTH ; Get Offset to Start of Line - - MOV BX, [BP].RP_Xpos ; Get Xpos - MOV CX, BX - SHR BX, 2 ; X offset (Bytes) = Xpos/4 - ADD BX, AX ; Offset = Width*Ypos + Xpos/4 - - MOV AL, READ_MAP ; GC Read Mask Register - MOV AH, CL ; Get Xpos - AND AH, PLANE_BITS ; & mask out Plane # - OUT_16 GC_INDEX, AX ; Select Plane to read in - - CLR AH ; Clear Return Value Hi byte - MOV AL, ES:[DI+BX] ; Get Color of Pixel - - POPx DI, BP ; Restore Saved Registers - RET 4 ; Exit and Clean up Stack - -READ_POINT ENDP - - -;====================================================== -;FILL_BLOCK (Xpos1%, Ypos1%, Xpos2%, Ypos2%, ColorNum%) -;====================================================== -; -; Fills a rectangular block on the active display Page -; -; ENTRY: Xpos1 = Left X position of area to fill -; Ypos1 = Top Y position of area to fill -; Xpos2 = Right X position of area to fill -; Ypos2 = Bottom Y position of area to fill -; ColorNum = Color to fill area with -; -; EXIT: No meaningful values returned -; - -FB_STACK STRUC - DW ?x4 ; DS, DI, SI, BP - DD ? ; Caller - FB_Color DB ?,? ; Fill Color - FB_Ypos2 DW ? ; Y pos of Lower Right Pixel - FB_Xpos2 DW ? ; X pos of Lower Right Pixel - FB_Ypos1 DW ? ; Y pos of Upper Left Pixel - FB_Xpos1 DW ? ; X pos of Upper Left Pixel -FB_STACK ENDS - - PUBLIC FILL_BLOCK - -FILL_BLOCK PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - MOV BP, SP ; Set up Stack Frame - - LES DI, d CURRENT_PAGE ; Point to Active VGA Page - CLD ; Direction Flag = Forward - - OUT_8 SC_INDEX, MAP_MASK ; Set up for Plane Select - - ; Validate Pixel Coordinates - ; If necessary, Swap so X1 <= X2, Y1 <= Y2 - - MOV AX, [BP].FB_Ypos1 ; AX = Y1 is Y1< Y2? - MOV BX, [BP].FB_Ypos2 ; BX = Y2 - CMP AX, BX - JLE @FB_NOSWAP1 - - MOV [BP].FB_Ypos1, BX ; Swap Y1 and Y2 and save Y1 - XCHG AX, BX ; on stack for future use - -@FB_NOSWAP1: - SUB BX, AX ; Get Y width - INC BX ; Add 1 to avoid 0 value - MOV [BP].FB_Ypos2, BX ; Save in Ypos2 - - MUL SCREEN_WIDTH ; Mul Y1 by Bytes per Line - ADD DI, AX ; DI = Start of Line Y1 - - MOV AX, [BP].FB_Xpos1 ; Check X1 <= X2 - MOV BX, [BP].FB_Xpos2 ; - CMP AX, BX - JLE @FB_NOSWAP2 ; Skip Ahead if Ok - - MOV [BP].FB_Xpos2, AX ; Swap X1 AND X2 and save X2 - XCHG AX, BX ; on stack for future use - - ; All our Input Values are in order, Now determine - ; How many full "bands" 4 pixels wide (aligned) there - ; are, and if there are partial bands (<4 pixels) on - ; the left and right edges. - -@FB_NOSWAP2: - MOV DX, AX ; DX = X1 (Pixel Position) - SHR DX, 2 ; DX/4 = Bytes into Line - ADD DI, DX ; DI = Addr of Upper-Left Corner - - MOV CX, BX ; CX = X2 (Pixel Position) - SHR CX, 2 ; CX/4 = Bytes into Line - - CMP DX, CX ; Start and end in same band? - JNE @FB_NORMAL ; if not, check for l & r edges - JMP @FB_ONE_BAND_ONLY ; if so, then special processing - -@FB_NORMAL: - SUB CX, DX ; CX = # bands -1 - MOV SI, AX ; SI = PLANE#(X1) - AND SI, PLANE_BITS ; if Left edge is aligned then - JZ @FB_L_PLANE_FLUSH ; no special processing.. - - ; Draw "Left Edge" vertical strip of 1-3 pixels... - - OUT_8 SC_Data, Left_Clip_Mask[SI] ; Set Left Edge Plane Mask - - MOV SI, DI ; SI = Copy of Start Addr (UL) - - MOV DX, [BP].FB_Ypos2 ; Get # of Lines to draw - MOV AL, [BP].FB_Color ; Get Fill Color - MOV BX, SCREEN_WIDTH ; Get Vertical increment Value - -@FB_LEFT_LOOP: - MOV ES:[SI], AL ; Fill in Left Edge Pixels - ADD SI, BX ; Point to Next Line (Below) - LOOPjz DX, @FB_LEFT_CONT ; Exit loop if all Lines Drawn - - MOV ES:[SI], AL ; Fill in Left Edge Pixels - ADD SI, BX ; Point to Next Line (Below) - LOOPx DX, @FB_LEFT_LOOP ; loop until left strip is drawn - -@FB_LEFT_CONT: - - INC DI ; Point to Middle (or Right) Block - DEC CX ; Reset CX instead of JMP @FB_RIGHT - -@FB_L_PLANE_FLUSH: - INC CX ; Add in Left band to middle block - - ; DI = Addr of 1st middle Pixel (band) to fill - ; CX = # of Bands to fill -1 - -@FB_RIGHT: - MOV SI, [BP].FB_Xpos2 ; Get Xpos2 - AND SI, PLANE_BITS ; Get Plane values - CMP SI, 0003 ; Plane = 3? - JE @FB_R_EDGE_FLUSH ; Hey, add to middle - - ; Draw "Right Edge" vertical strip of 1-3 pixels... - - OUT_8 SC_Data, Right_Clip_Mask[SI] ; Right Edge Plane Mask - - MOV SI, DI ; Get Addr of Left Edge - ADD SI, CX ; Add Width-1 (Bands) - DEC SI ; To point to top of Right Edge - - MOV DX, [BP].FB_Ypos2 ; Get # of Lines to draw - MOV AL, [BP].FB_Color ; Get Fill Color - MOV BX, SCREEN_WIDTH ; Get Vertical increment Value - -@FB_RIGHT_LOOP: - MOV ES:[SI], AL ; Fill in Right Edge Pixels - ADD SI, BX ; Point to Next Line (Below) - LOOPjz DX, @FB_RIGHT_CONT ; Exit loop if all Lines Drawn - - MOV ES:[SI], AL ; Fill in Right Edge Pixels - ADD SI, BX ; Point to Next Line (Below) - LOOPx DX, @FB_RIGHT_LOOP ; loop until left strip is drawn - -@FB_RIGHT_CONT: - - DEC CX ; Minus 1 for Middle bands - JZ @FB_EXIT ; Uh.. no Middle bands... - -@FB_R_EDGE_FLUSH: - - ; DI = Addr of Upper Left block to fill - ; CX = # of Bands to fill in (width) - - OUT_8 SC_Data, ALL_PLANES ; Write to All Planes - - MOV DX, SCREEN_WIDTH ; DX = DI Increment - SUB DX, CX ; = Screen_Width-# Planes Filled - - MOV BX, CX ; BX = Quick Refill for CX - MOV SI, [BP].FB_Ypos2 ; SI = # of Line to Fill - MOV AL, [BP].FB_Color ; Get Fill Color - -@FB_MIDDLE_LOOP: - REP STOSB ; Fill in entire line - - MOV CX, BX ; Recharge CX (Line Width) - ADD DI, DX ; Point to start of Next Line - LOOPx SI, @FB_MIDDLE_LOOP ; Loop until all lines drawn - - JMP s @FB_EXIT ; Outa here - -@FB_ONE_BAND_ONLY: - MOV SI, AX ; Get Left Clip Mask, Save X1 - AND SI, PLANE_BITS ; Mask out Row # - MOV AL, Left_Clip_Mask[SI] ; Get Left Edge Mask - MOV SI, BX ; Get Right Clip Mask, Save X2 - AND SI, PLANE_BITS ; Mask out Row # - AND AL, Right_Clip_Mask[SI] ; Get Right Edge Mask byte - - OUT_8 SC_Data, AL ; Clip For Left & Right Masks - - MOV CX, [BP].FB_Ypos2 ; Get # of Lines to draw - MOV AL, [BP].FB_Color ; Get Fill Color - MOV BX, SCREEN_WIDTH ; Get Vertical increment Value - -@FB_ONE_LOOP: - MOV ES:[DI], AL ; Fill in Pixels - ADD DI, BX ; Point to Next Line (Below) - LOOPjz CX, @FB_EXIT ; Exit loop if all Lines Drawn - - MOV ES:[DI], AL ; Fill in Pixels - ADD DI, BX ; Point to Next Line (Below) - LOOPx CX, @FB_ONE_LOOP ; loop until left strip is drawn - -@FB_EXIT: - POPx DI, SI, DS, BP ; Restore Saved Registers - RET 10 ; Exit and Clean up Stack - -FILL_BLOCK ENDP - - -;===================================================== -;DRAW_LINE (Xpos1%, Ypos1%, Xpos2%, Ypos2%, ColorNum%) -;===================================================== -; -; Draws a Line on the active display page -; -; ENTRY: Xpos1 = X position of first point on line -; Ypos1 = Y position of first point on line -; Xpos2 = X position of last point on line -; Ypos2 = Y position of last point on line -; ColorNum = Color to draw line with -; -; EXIT: No meaningful values returned -; - -DL_STACK STRUC - DW ?x3 ; DI, SI, BP - DD ? ; Caller - DL_ColorF DB ?,? ; Line Draw Color - DL_Ypos2 DW ? ; Y pos of last point - DL_Xpos2 DW ? ; X pos of last point - DL_Ypos1 DW ? ; Y pos of first point - DL_Xpos1 DW ? ; X pos of first point -DL_STACK ENDS - - PUBLIC DRAW_LINE - -DRAW_LINE PROC FAR - - PUSHx BP, SI, DI ; Preserve Important Registers - MOV BP, SP ; Set up Stack Frame - CLD ; Direction Flag = Forward - - OUT_8 SC_INDEX, MAP_MASK ; Set up for Plane Select - MOV CH, [BP].DL_ColorF ; Save Line Color in CH - - ; Check Line Type - - MOV SI, [BP].DL_Xpos1 ; AX = X1 is X1< X2? - MOV DI, [BP].DL_Xpos2 ; DX = X2 - CMP SI, DI ; Is X1 < X2 - JE @DL_VLINE ; If X1=X2, Draw Vertical Line - JL @DL_NOSWAP1 ; If X1 < X2, don't swap - - XCHG SI, DI ; X2 IS > X1, SO SWAP THEM - -@DL_NOSWAP1: - - ; SI = X1, DI = X2 - - MOV AX, [BP].DL_Ypos1 ; AX = Y1 is Y1 <> Y2? - CMP AX, [BP].DL_Ypos2 ; Y1 = Y2? - JE @DL_HORZ ; If so, Draw a Horizontal Line - - JMP @DL_BREZHAM ; Diagonal line... go do it... - - ; This Code draws a Horizontal Line in Mode X where: - ; SI = X1, DI = X2, and AX = Y1/Y2 - -@DL_HORZ: - - MUL SCREEN_WIDTH ; Offset = Ypos * Screen_Width - MOV DX, AX ; CX = Line offset into Page - - MOV AX, SI ; Get Left edge, Save X1 - AND SI, PLANE_BITS ; Mask out Row # - MOV BL, Left_Clip_Mask[SI] ; Get Left Edge Mask - MOV CX, DI ; Get Right edge, Save X2 - AND DI, PLANE_BITS ; Mask out Row # - MOV BH, Right_Clip_Mask[DI] ; Get Right Edge Mask byte - - SHR AX, 2 ; Get X1 Byte # (=X1/4) - SHR CX, 2 ; Get X2 Byte # (=X2/4) - - LES DI, d CURRENT_PAGE ; Point to Active VGA Page - ADD DI, DX ; Point to Start of Line - ADD DI, AX ; Point to Pixel X1 - - SUB CX, AX ; CX = # Of Bands (-1) to set - JNZ @DL_LONGLN ; jump if longer than one segment - - AND BL, BH ; otherwise, merge clip masks - -@DL_LONGLN: - - OUT_8 SC_Data, BL ; Set the Left Clip Mask - - MOV AL, [BP].DL_ColorF ; Get Line Color - MOV BL, AL ; BL = Copy of Line Color - STOSB ; Set Left (1-4) Pixels - - JCXZ @DL_EXIT ; Done if only one Line Segment - - DEC CX ; CX = # of Middle Segments - JZ @DL_XRSEG ; If no middle segments.... - - ; Draw Middle Segments - - OUT_8 DX, ALL_PLANES ; Write to ALL Planes - - MOV AL, BL ; Get Color from BL - REP STOSB ; Draw Middle (4 Pixel) Segments - -@DL_XRSEG: - OUT_8 DX, BH ; Select Planes for Right Clip Mask - MOV AL, BL ; Get Color Value - STOSB ; Draw Right (1-4) Pixels - - JMP s @DL_EXIT ; We Are Done... - - - ; This Code Draws A Vertical Line. On entry: - ; CH = Line Color, SI & DI = X1 - -@DL_VLINE: - - MOV AX, [BP].DL_Ypos1 ; AX = Y1 - MOV SI, [BP].DL_Ypos2 ; SI = Y2 - CMP AX, SI ; Is Y1 < Y2? - JLE @DL_NOSWAP2 ; if so, Don't Swap them - - XCHG AX, SI ; Ok, NOW Y1 < Y2 - -@DL_NOSWAP2: - - SUB SI, AX ; SI = Line Height (Y2-Y1+1) - INC SI - - ; AX = Y1, DI = X1, Get offset into Page into AX - - MUL SCREEN_WIDTH ; Offset = Y1 (AX) * Screen Width - MOV DX, DI ; Copy Xpos into DX - SHR DI, 2 ; DI = Xpos/4 - ADD AX, DI ; DI = Xpos/4 + ScreenWidth * Y1 - - LES DI, d CURRENT_PAGE ; Point to Active VGA Page - ADD DI, AX ; Point to Pixel X1, Y1 - - ;Select Plane - - MOV CL, DL ; CL = Save X1 - AND CL, PLANE_BITS ; Get X1 MOD 4 (Plane #) - MOV AX, MAP_MASK_PLANE1 ; Code to set Plane #1 - SHL AH, CL ; Change to Correct Plane # - OUT_16 SC_Index, AX ; Select Plane - - MOV AL, CH ; Get Saved Color - MOV BX, SCREEN_WIDTH ; Get Offset to Advance Line By - -@DL_VLoop: - MOV ES:[DI], AL ; Draw Single Pixel - ADD DI, BX ; Point to Next Line - LOOPjz SI, @DL_EXIT ; Lines--, Exit if done - - MOV ES:[DI], AL ; Draw Single Pixel - ADD DI, BX ; Point to Next Line - LOOPx SI, @DL_VLoop ; Lines--, Loop until Done - -@DL_EXIT: - - JMP @DL_EXIT2 ; Done! - - ; This code Draws a diagonal line in Mode X - -@DL_BREZHAM: - LES DI, d CURRENT_PAGE ; Point to Active VGA Page - - MOV AX, [BP].DL_Ypos1 ; get Y1 value - MOV BX, [BP].DL_Ypos2 ; get Y2 value - MOV CX, [BP].DL_Xpos1 ; Get Starting Xpos - - CMP BX, AX ; Y2-Y1 is? - JNC @DL_DeltaYOK ; if Y2>=Y1 then goto... - - XCHG BX, AX ; Swap em... - MOV CX, [BP].DL_Xpos2 ; Get New Starting Xpos - -@DL_DeltaYOK: - MUL SCREEN_WIDTH ; Offset = SCREEN_WIDTH * Y1 - - ADD DI, AX ; DI -> Start of Line Y1 on Page - MOV AX, CX ; AX = Xpos (X1) - SHR AX, 2 ; /4 = Byte Offset into Line - ADD DI, AX ; DI = Starting pos (X1,Y1) - - MOV AL, 11h ; Staring Mask - AND CL, PLANE_BITS ; Get Plane # - SHL AL, CL ; and shift into place - MOV AH, [BP].DL_ColorF ; Color in Hi Bytes - - PUSH AX ; Save Mask,Color... - - MOV AH, AL ; Plane # in AH - MOV AL, MAP_MASK ; Select Plane Register - OUT_16 SC_Index, AX ; Select initial plane - - MOV AX, [BP].DL_Xpos1 ; get X1 value - MOV BX, [BP].DL_Ypos1 ; get Y1 value - MOV CX, [BP].DL_Xpos2 ; get X2 value - MOV DX, [BP].DL_Ypos2 ; get Y2 value - - MOV BP, SCREEN_WIDTH ; Use BP for Line width to - ; to avoid extra memory access - - SUB DX, BX ; figure Delta_Y - JNC @DL_DeltaYOK2 ; jump if Y2 >= Y1 - - ADD BX, DX ; put Y2 into Y1 - NEG DX ; abs(Delta_Y) - XCHG AX, CX ; and exchange X1 and X2 - -@DL_DeltaYOK2: - MOV BX, 08000H ; seed for fraction accumulator - - SUB CX, AX ; figure Delta_X - JC @DL_DrawLeft ; if negative, go left - - JMP @DL_DrawRight ; Draw Line that slopes right - -@DL_DrawLeft: - - NEG CX ; abs(Delta_X) - - CMP CX, DX ; is Delta_X < Delta_Y? - JB @DL_SteepLeft ; yes, so go do steep line - ; (Delta_Y iterations) - - ; Draw a Shallow line to the left in Mode X - -@DL_ShallowLeft: - CLR AX ; zero low word of Delta_Y * 10000h - SUB AX, DX ; DX:AX <- DX * 0FFFFh - SBB DX, 0 ; include carry - DIV CX ; divide by Delta_X - - MOV SI, BX ; SI = Accumulator - MOV BX, AX ; BX = Add fraction - POP AX ; Get Color, Bit mask - MOV DX, SC_Data ; Sequence controller data register - INC CX ; Inc Delta_X so we can unroll loop - - ; Loop (x2) to Draw Pixels, Move Left, and Maybe Down... - -@DL_SLLLoop: - MOV ES:[DI], AH ; set first pixel, plane data set up - LOOPjz CX, @DL_SLLExit ; Delta_X--, Exit if done - - ADD SI, BX ; add numerator to accumulator - JNC @DL_SLLL2nc ; move down on carry - - ADD DI, BP ; Move Down one line... - -@DL_SLLL2nc: - DEC DI ; Left one addr - ROR AL, 1 ; Move Left one plane, back on 0 1 2 - CMP AL, 87h ; wrap?, if AL <88 then Carry set - ADC DI, 0 ; Adjust Address: DI = DI + Carry - OUT DX, AL ; Set up New Bit Plane mask - - MOV ES:[DI], AH ; set pixel - LOOPjz CX, @DL_SLLExit ; Delta_X--, Exit if done - - ADD SI, BX ; add numerator to accumulator, - JNC @DL_SLLL3nc ; move down on carry - - ADD DI, BP ; Move Down one line... - -@DL_SLLL3nc: ; Now move left a pixel... - DEC DI ; Left one addr - ROR AL, 1 ; Move Left one plane, back on 0 1 2 - CMP AL, 87h ; Wrap?, if AL <88 then Carry set - ADC DI, 0 ; Adjust Address: DI = DI + Carry - OUT DX, AL ; Set up New Bit Plane mask - JMP s @DL_SLLLoop ; loop until done - -@DL_SLLExit: - JMP @DL_EXIT2 ; and exit - - ; Draw a steep line to the left in Mode X - -@DL_SteepLeft: - CLR AX ; zero low word of Delta_Y * 10000h - XCHG DX, CX ; Delta_Y switched with Delta_X - DIV CX ; divide by Delta_Y - - MOV SI, BX ; SI = Accumulator - MOV BX, AX ; BX = Add Fraction - POP AX ; Get Color, Bit mask - MOV DX, SC_Data ; Sequence controller data register - INC CX ; Inc Delta_Y so we can unroll loop - - ; Loop (x2) to Draw Pixels, Move Down, and Maybe left - -@DL_STLLoop: - - MOV ES:[DI], AH ; set first pixel - LOOPjz CX, @DL_STLExit ; Delta_Y--, Exit if done - - ADD SI, BX ; add numerator to accumulator - JNC @DL_STLnc2 ; No carry, just move down! - - DEC DI ; Move Left one addr - ROR AL, 1 ; Move Left one plane, back on 0 1 2 - CMP AL, 87h ; Wrap?, if AL <88 then Carry set - ADC DI, 0 ; Adjust Address: DI = DI + Carry - OUT DX, AL ; Set up New Bit Plane mask - -@DL_STLnc2: - ADD DI, BP ; advance to next line. - - MOV ES:[DI], AH ; set pixel - LOOPjz CX, @DL_STLExit ; Delta_Y--, Exit if done - - ADD SI, BX ; add numerator to accumulator - JNC @DL_STLnc3 ; No carry, just move down! - - DEC DI ; Move Left one addr - ROR AL, 1 ; Move Left one plane, back on 0 1 2 - CMP AL, 87h ; Wrap?, if AL <88 then Carry set - ADC DI, 0 ; Adjust Address: DI = DI + Carry - OUT DX, AL ; Set up New Bit Plane mask - -@DL_STLnc3: - ADD DI, BP ; advance to next line. - JMP s @DL_STLLoop ; Loop until done - -@DL_STLExit: - JMP @DL_EXIT2 ; and exit - - ; Draw a line that goes to the Right... - -@DL_DrawRight: - CMP CX, DX ; is Delta_X < Delta_Y? - JB @DL_SteepRight ; yes, so go do steep line - ; (Delta_Y iterations) - - ; Draw a Shallow line to the Right in Mode X - -@DL_ShallowRight: - CLR AX ; zero low word of Delta_Y * 10000h - SUB AX, DX ; DX:AX <- DX * 0FFFFh - SBB DX, 0 ; include carry - DIV CX ; divide by Delta_X - - MOV SI, BX ; SI = Accumulator - MOV BX, AX ; BX = Add Fraction - POP AX ; Get Color, Bit mask - MOV DX, SC_Data ; Sequence controller data register - INC CX ; Inc Delta_X so we can unroll loop - - ; Loop (x2) to Draw Pixels, Move Right, and Maybe Down... - -@DL_SLRLoop: - MOV ES:[DI], AH ; set first pixel, mask is set up - LOOPjz CX, @DL_SLRExit ; Delta_X--, Exit if done.. - - ADD SI, BX ; add numerator to accumulator - JNC @DL_SLR2nc ; don't move down if carry not set - - ADD DI, BP ; Move Down one line... - -@DL_SLR2nc: ; Now move right a pixel... - ROL AL, 1 ; Move Right one addr if Plane = 0 - CMP AL, 12h ; Wrap? if AL >12 then Carry not set - ADC DI, 0 ; Adjust Address: DI = DI + Carry - OUT DX, AL ; Set up New Bit Plane mask - - MOV ES:[DI], AH ; set pixel - LOOPjz CX, @DL_SLRExit ; Delta_X--, Exit if done.. - - ADD SI, BX ; add numerator to accumulator - JNC @DL_SLR3nc ; don't move down if carry not set - - ADD DI, BP ; Move Down one line... - -@DL_SLR3nc: - ROL AL, 1 ; Move Right one addr if Plane = 0 - CMP AL, 12h ; Wrap? if AL >12 then Carry not set - ADC DI, 0 ; Adjust Address: DI = DI + Carry - OUT DX, AL ; Set up New Bit Plane mask - JMP s @DL_SLRLoop ; loop till done - -@DL_SLRExit: - JMP @DL_EXIT2 ; and exit - - ; Draw a Steep line to the Right in Mode X - -@DL_SteepRight: - CLR AX ; zero low word of Delta_Y * 10000h - XCHG DX, CX ; Delta_Y switched with Delta_X - DIV CX ; divide by Delta_Y - - MOV SI, BX ; SI = Accumulator - MOV BX, AX ; BX = Add Fraction - POP AX ; Get Color, Bit mask - MOV DX, SC_Data ; Sequence controller data register - INC CX ; Inc Delta_Y so we can unroll loop - - ; Loop (x2) to Draw Pixels, Move Down, and Maybe Right - -@STRLoop: - MOV ES:[DI], AH ; set first pixel, mask is set up - LOOPjz CX, @DL_EXIT2 ; Delta_Y--, Exit if Done - - ADD SI, BX ; add numerator to accumulator - JNC @STRnc2 ; if no carry then just go down... - - ROL AL, 1 ; Move Right one addr if Plane = 0 - CMP AL, 12h ; Wrap? if AL >12 then Carry not set - ADC DI, 0 ; Adjust Address: DI = DI + Carry - OUT DX, AL ; Set up New Bit Plane mask - -@STRnc2: - ADD DI, BP ; advance to next line. - - MOV ES:[DI], AH ; set pixel - LOOPjz CX, @DL_EXIT2 ; Delta_Y--, Exit if Done - - ADD SI, BX ; add numerator to accumulator - JNC @STRnc3 ; if no carry then just go down... - - ROL AL, 1 ; Move Right one addr if Plane = 0 - CMP AL, 12h ; Wrap? if AL >12 then Carry not set - ADC DI, 0 ; Adjust Address: DI = DI + Carry - OUT DX, AL ; Set up New Bit Plane mask - -@STRnc3: - ADD DI, BP ; advance to next line. - JMP s @STRLoop ; loop till done - -@DL_EXIT2: - POPx DI, SI, BP ; Restore Saved Registers - RET 10 ; Exit and Clean up Stack - -DRAW_LINE ENDP - - - ; ===== DAC COLOR REGISTER ROUTINES ===== - -;================================================= -;SET_DAC_REGISTER (Register%, Red%, Green%, Blue%) -;================================================= -; -; Sets a single (RGB) Vga Palette Register -; -; ENTRY: Register = The DAC # to modify (0-255) -; Red = The new Red Intensity (0-63) -; Green = The new Green Intensity (0-63) -; Blue = The new Blue Intensity (0-63) -; -; EXIT: No meaningful values returned -; - -SDR_STACK STRUC - DW ? ; BP - DD ? ; Caller - SDR_Blue DB ?,? ; Blue Data Value - SDR_Green DB ?,? ; Green Data Value - SDR_Red DB ?,? ; Red Data Value - SDR_Register DB ?,? ; Palette Register # -SDR_STACK ENDS - - PUBLIC SET_DAC_REGISTER - -SET_DAC_REGISTER PROC FAR - - PUSH BP ; Save BP - MOV BP, SP ; Set up Stack Frame - - ; Select which DAC Register to modify - - OUT_8 DAC_WRITE_ADDR, [BP].SDR_Register - - MOV DX, PEL_DATA_REG ; Dac Data Register - OUT_8 DX, [BP].SDR_Red ; Set Red Intensity - OUT_8 DX, [BP].SDR_Green ; Set Green Intensity - OUT_8 DX, [BP].SDR_Blue ; Set Blue Intensity - - POP BP ; Restore Registers - RET 8 ; Exit & Clean Up Stack - -SET_DAC_REGISTER ENDP - -;==================================================== -;GET_DAC_REGISTER (Register%, &Red%, &Green%, &Blue%) -;==================================================== -; -; Reads the RGB Values of a single Vga Palette Register -; -; ENTRY: Register = The DAC # to read (0-255) -; Red = Offset to Red Variable in DS -; Green = Offset to Green Variable in DS -; Blue = Offset to Blue Variable in DS -; -; EXIT: The values of the integer variables Red, -; Green, and Blue are set to the values -; taken from the specified DAC register. -; - -GDR_STACK STRUC - DW ? ; BP - DD ? ; Caller - GDR_Blue DW ? ; Addr of Blue Data Value in DS - GDR_Green DW ? ; Addr of Green Data Value in DS - GDR_Red DW ? ; Addr of Red Data Value in DS - GDR_Register DB ?,? ; Palette Register # -GDR_STACK ENDS - - PUBLIC GET_DAC_REGISTER - -GET_DAC_REGISTER PROC FAR - - PUSH BP ; Save BP - MOV BP, SP ; Set up Stack Frame - - ; Select which DAC Register to read in - - OUT_8 DAC_READ_ADDR, [BP].GDR_Register - - MOV DX, PEL_DATA_REG ; Dac Data Register - CLR AX ; Clear AX - - IN AL, DX ; Read Red Value - MOV BX, [BP].GDR_Red ; Get Address of Red% - MOV [BX], AX ; *Red% = AX - - IN AL, DX ; Read Green Value - MOV BX, [BP].GDR_Green ; Get Address of Green% - MOV [BX], AX ; *Green% = AX - - IN AL, DX ; Read Blue Value - MOV BX, [BP].GDR_Blue ; Get Address of Blue% - MOV [BX], AX ; *Blue% = AX - - POP BP ; Restore Registers - RET 8 ; Exit & Clean Up Stack - -GET_DAC_REGISTER ENDP - - -;=========================================================== -;LOAD_DAC_REGISTERS (SEG PalData, StartReg%, EndReg%, Sync%) -;=========================================================== -; -; Sets a Block of Vga Palette Registers -; -; ENTRY: PalData = Far Pointer to Block of palette data -; StartReg = First Register # in range to set (0-255) -; EndReg = Last Register # in Range to set (0-255) -; Sync = Wait for Vertical Retrace Flag (Boolean) -; -; EXIT: No meaningful values returned -; -; NOTES: PalData is a linear array of 3 byte Palette values -; in the order: Red (0-63), Green (0-63), Blue (0-63) -; - -LDR_STACK STRUC - DW ?x3 ; BP, DS, SI - DD ? ; Caller - LDR_Sync DW ? ; Vertical Sync Flag - LDR_EndReg DB ?,? ; Last Register # - LDR_StartReg DB ?,? ; First Register # - LDR_PalData DD ? ; Far Ptr to Palette Data -LDR_STACK ENDS - - PUBLIC LOAD_DAC_REGISTERS - -LOAD_DAC_REGISTERS PROC FAR - - PUSHx BP, DS, SI ; Save Registers - mov BP, SP ; Set up Stack Frame - - mov AX, [BP].LDR_Sync ; Get Vertical Sync Flag - or AX, AX ; is Sync Flag = 0? - jz @LDR_Load ; if so, skip call - - call f SYNC_DISPLAY ; wait for vsync - - ; Determine register #'s, size to copy, etc - -@LDR_Load: - - lds SI, [BP].LDR_PalData ; DS:SI -> Palette Data - mov DX, DAC_WRITE_ADDR ; DAC register # selector - - CLR AX, BX ; Clear for byte loads - mov AL, [BP].LDR_StartReg ; Get Start Register - mov BL, [BP].LDR_EndReg ; Get End Register - - sub BX, AX ; BX = # of DAC registers -1 - inc BX ; BX = # of DAC registers - mov CX, BX ; CX = # of DAC registers - add CX, BX ; CX = " " * 2 - add CX, BX ; CX = " " * 3 - cld ; Block OUTs forward - out DX, AL ; set up correct register # - - ; Load a block of DAC Registers - - mov DX, PEL_DATA_REG ; Dac Data Register - - rep outsb ; block set DAC registers - - POPx SI, DS, BP ; Restore Registers - ret 10 ; Exit & Clean Up Stack - -LOAD_DAC_REGISTERS ENDP - - -;==================================================== -;READ_DAC_REGISTERS (SEG PalData, StartReg%, EndReg%) -;==================================================== -; -; Reads a Block of Vga Palette Registers -; -; ENTRY: PalData = Far Pointer to block to store palette data -; StartReg = First Register # in range to read (0-255) -; EndReg = Last Register # in Range to read (0-255) -; -; EXIT: No meaningful values returned -; -; NOTES: PalData is a linear array of 3 byte Palette values -; in the order: Red (0-63), Green (0-63), Blue (0-63) -; - -RDR_STACK STRUC - DW ?x3 ; BP, ES, DI - DD ? ; Caller - RDR_EndReg DB ?,? ; Last Register # - RDR_StartReg DB ?,? ; First Register # - RDR_PalData DD ? ; Far Ptr to Palette Data -RDR_STACK ENDS - - PUBLIC READ_DAC_REGISTERS - -READ_DAC_REGISTERS PROC FAR - - PUSHx BP, ES, DI ; Save Registers - mov BP, SP ; Set up Stack Frame - - ; Determine register #'s, size to copy, etc - - les DI, [BP].RDR_PalData ; ES:DI -> Palette Buffer - mov DX, DAC_READ_ADDR ; DAC register # selector - - CLR AX, BX ; Clear for byte loads - mov AL, [BP].RDR_StartReg ; Get Start Register - mov BL, [BP].RDR_EndReg ; Get End Register - - sub BX, AX ; BX = # of DAC registers -1 - inc BX ; BX = # of DAC registers - mov CX, BX ; CX = # of DAC registers - add CX, BX ; CX = " " * 2 - add CX, BX ; CX = " " * 3 - cld ; Block INs forward - - ; Read a block of DAC Registers - - out DX, AL ; set up correct register # - mov DX, PEL_DATA_REG ; Dac Data Register - - rep insb ; block read DAC registers - - POPx DI, ES, BP ; Restore Registers - ret 8 ; Exit & Clean Up Stack - -READ_DAC_REGISTERS ENDP - - - ; ===== PAGE FLIPPING AND SCROLLING ROUTINES ===== - -;========================= -;SET_ACTIVE_PAGE (PageNo%) -;========================= -; -; Sets the active display Page to be used for future drawing -; -; ENTRY: PageNo = Display Page to make active -; (values: 0 to Number of Pages - 1) -; -; EXIT: No meaningful values returned -; - -SAP_STACK STRUC - DW ? ; BP - DD ? ; Caller - SAP_Page DW ? ; Page # for Drawing -SAP_STACK ENDS - - PUBLIC SET_ACTIVE_PAGE - -SET_ACTIVE_PAGE PROC FAR - - PUSH BP ; Preserve Registers - MOV BP, SP ; Set up Stack Frame - - MOV BX, [BP].SAP_Page ; Get Desired Page # - CMP BX, LAST_PAGE ; Is Page # Valid? - JAE @SAP_Exit ; IF Not, Do Nothing - - MOV ACTIVE_PAGE, BX ; Set Active Page # - - SHL BX, 1 ; Scale Page # to Word - MOV AX, PAGE_ADDR[BX] ; Get offset to Page - - MOV CURRENT_PAGE, AX ; And set for future LES's - -@SAP_Exit: - POP BP ; Restore Registers - RET 2 ; Exit and Clean up Stack - -SET_ACTIVE_PAGE ENDP - - -;================ -;GET_ACTIVE_PAGE% -;================ -; -; Returns the Video Page # currently used for Drawing -; -; ENTRY: No Parameters are passed -; -; EXIT: AX = Current Video Page used for Drawing -; - - PUBLIC GET_ACTIVE_PAGE - -GET_ACTIVE_PAGE PROC FAR - - MOV AX, ACTIVE_PAGE ; Get Active Page # - RET ; Exit and Clean up Stack - -GET_ACTIVE_PAGE ENDP - - -;=============================== -;SET_DISPLAY_PAGE (DisplayPage%) -;=============================== -; -; Sets the currently visible display page. -; When called this routine syncronizes the display -; to the vertical blank. -; -; ENTRY: PageNo = Display Page to show on the screen -; (values: 0 to Number of Pages - 1) -; -; EXIT: No meaningful values returned -; - -SDP_STACK STRUC - DW ? ; BP - DD ? ; Caller - SDP_Page DW ? ; Page # to Display... -SDP_STACK ENDS - - PUBLIC SET_DISPLAY_PAGE - -SET_DISPLAY_PAGE PROC FAR - - PUSH BP ; Preserve Registers - MOV BP, SP ; Set up Stack Frame - - MOV BX, [BP].SDP_Page ; Get Desired Page # - CMP BX, LAST_PAGE ; Is Page # Valid? - JAE @SDP_Exit ; IF Not, Do Nothing - - MOV DISPLAY_PAGE, BX ; Set Display Page # - - SHL BX, 1 ; Scale Page # to Word - MOV CX, PAGE_ADDR[BX] ; Get offset in memory to Page - ADD CX, CURRENT_MOFFSET ; Adjust for any scrolling - - ; Wait if we are currently in a Vertical Retrace - - MOV DX, INPUT_1 ; Input Status #1 Register - -@DP_WAIT0: - IN AL, DX ; Get VGA status - AND AL, VERT_RETRACE ; In Display mode yet? - JNZ @DP_WAIT0 ; If Not, wait for it - - ; Set the Start Display Address to the new page - - MOV DX, CRTC_Index ; We Change the VGA Sequencer - - MOV AL, START_DISP_LO ; Display Start Low Register - MOV AH, CL ; Low 8 Bits of Start Addr - OUT DX, AX ; Set Display Addr Low - - MOV AL, START_DISP_HI ; Display Start High Register - MOV AH, CH ; High 8 Bits of Start Addr - OUT DX, AX ; Set Display Addr High - - ; Wait for a Vertical Retrace to smooth out things - - MOV DX, INPUT_1 ; Input Status #1 Register - -@DP_WAIT1: - IN AL, DX ; Get VGA status - AND AL, VERT_RETRACE ; Vertical Retrace Start? - JZ @DP_WAIT1 ; If Not, wait for it - - ; Now Set Display Starting Address - - -@SDP_Exit: - POP BP ; Restore Registers - RET 2 ; Exit and Clean up Stack - -SET_DISPLAY_PAGE ENDP - - -;================= -;GET_DISPLAY_PAGE% -;================= -; -; Returns the Video Page # currently displayed -; -; ENTRY: No Parameters are passed -; -; EXIT: AX = Current Video Page being displayed -; - - PUBLIC GET_DISPLAY_PAGE - -GET_DISPLAY_PAGE PROC FAR - - MOV AX, DISPLAY_PAGE ; Get Display Page # - RET ; Exit & Clean Up Stack - -GET_DISPLAY_PAGE ENDP - - -;======================================= -;SET_WINDOW (DisplayPage%, Xpos%, Ypos%) -;======================================= -; -; Since a Logical Screen can be larger than the Physical -; Screen, Scrolling is possible. This routine sets the -; Upper Left Corner of the Screen to the specified Pixel. -; Also Sets the Display page to simplify combined page -; flipping and scrolling. When called this routine -; syncronizes the display to the vertical blank. -; -; ENTRY: DisplayPage = Display Page to show on the screen -; Xpos = # of pixels to shift screen right -; Ypos = # of lines to shift screen down -; -; EXIT: No meaningful values returned -; - -SW_STACK STRUC - DW ? ; BP - DD ? ; Caller - SW_Ypos DW ? ; Y pos of UL Screen Corner - SW_Xpos DW ? ; X pos of UL Screen Corner - SW_Page DW ? ; (new) Display Page -SW_STACK ENDS - - PUBLIC SET_WINDOW - -SET_WINDOW PROC FAR - - PUSH BP ; Preserve Registers - MOV BP, SP ; Set up Stack Frame - - ; Check if our Scroll Offsets are Valid - - MOV BX, [BP].SW_Page ; Get Desired Page # - CMP BX, LAST_PAGE ; Is Page # Valid? - JAE @SW_Exit ; IF Not, Do Nothing - - MOV AX, [BP].SW_Ypos ; Get Desired Y Offset - CMP AX, MAX_YOFFSET ; Is it Within Limits? - JA @SW_Exit ; if not, exit - - MOV CX, [BP].SW_Xpos ; Get Desired X Offset - CMP CX, MAX_XOFFSET ; Is it Within Limits? - JA @SW_Exit ; if not, exit - - ; Compute proper Display start address to use - - MUL SCREEN_WIDTH ; AX = YOffset * Line Width - SHR CX, 2 ; CX / 4 = Bytes into Line - ADD AX, CX ; AX = Offset of Upper Left Pixel - - MOV CURRENT_MOFFSET, AX ; Save Offset Info - - MOV DISPLAY_PAGE, BX ; Set Current Page # - SHL BX, 1 ; Scale Page # to Word - ADD AX, PAGE_ADDR[BX] ; Get offset in VGA to Page - MOV BX, AX ; BX = Desired Display Start - - MOV DX, INPUT_1 ; Input Status #1 Register - - ; Wait if we are currently in a Vertical Retrace - -@SW_WAIT0: - IN AL, DX ; Get VGA status - AND AL, VERT_RETRACE ; In Display mode yet? - JNZ @SW_WAIT0 ; If Not, wait for it - - ; Set the Start Display Address to the new window - - MOV DX, CRTC_Index ; We Change the VGA Sequencer - MOV AL, START_DISP_LO ; Display Start Low Register - MOV AH, BL ; Low 8 Bits of Start Addr - OUT DX, AX ; Set Display Addr Low - - MOV AL, START_DISP_HI ; Display Start High Register - MOV AH, BH ; High 8 Bits of Start Addr - OUT DX, AX ; Set Display Addr High - - ; Wait for a Vertical Retrace to smooth out things - - MOV DX, INPUT_1 ; Input Status #1 Register - -@SW_WAIT1: - IN AL, DX ; Get VGA status - AND AL, VERT_RETRACE ; Vertical Retrace Start? - JZ @SW_WAIT1 ; If Not, wait for it - - ; Now Set the Horizontal Pixel Pan values - - OUT_8 ATTRIB_Ctrl, PIXEL_PAN_REG ; Select Pixel Pan Register - - MOV AX, [BP].SW_Xpos ; Get Desired X Offset - AND AL, 03 ; Get # of Pixels to Pan (0-3) - SHL AL, 1 ; Shift for 256 Color Mode - OUT DX, AL ; Fine tune the display! - -@SW_Exit: - POP BP ; Restore Saved Registers - RET 6 ; Exit and Clean up Stack - -SET_WINDOW ENDP - - -;============= -;GET_X_OFFSET% -;============= -; -; Returns the X coordinate of the Pixel currently display -; in the upper left corner of the display -; -; ENTRY: No Parameters are passed -; -; EXIT: AX = Current Horizontal Scroll Offset -; - - PUBLIC GET_X_OFFSET - -GET_X_OFFSET PROC FAR - - MOV AX, CURRENT_XOFFSET ; Get current horz offset - RET ; Exit & Clean Up Stack - -GET_X_OFFSET ENDP - - -;============= -;GET_Y_OFFSET% -;============= -; -; Returns the Y coordinate of the Pixel currently display -; in the upper left corner of the display -; -; ENTRY: No Parameters are passed -; -; EXIT: AX = Current Vertical Scroll Offset -; - - PUBLIC GET_Y_OFFSET - -GET_Y_OFFSET PROC FAR - - MOV AX, CURRENT_YOFFSET ; Get current vertical offset - RET ; Exit & Clean Up Stack - -GET_Y_OFFSET ENDP - - -;============ -;SYNC_DISPLAY -;============ -; -; Pauses the computer until the next Vertical Retrace starts -; -; ENTRY: No Parameters are passed -; -; EXIT: No meaningful values returned -; - - PUBLIC SYNC_DISPLAY - -SYNC_DISPLAY PROC FAR - - MOV DX, INPUT_1 ; Input Status #1 Register - - ; Wait for any current retrace to end - -@SD_WAIT0: - IN AL, DX ; Get VGA status - AND AL, VERT_RETRACE ; In Display mode yet? - JNZ @SD_WAIT0 ; If Not, wait for it - - ; Wait for the start of the next vertical retrace - -@SD_WAIT1: - IN AL, DX ; Get VGA status - AND AL, VERT_RETRACE ; Vertical Retrace Start? - JZ @SD_WAIT1 ; If Not, wait for it - - RET ; Exit & Clean Up Stack - -SYNC_DISPLAY ENDP - - - ; ===== TEXT DISPLAY ROUTINES ===== - -;================================================== -;GPRINTC (CharNum%, Xpos%, Ypos%, ColorF%, ColorB%) -;================================================== -; -; Draws an ASCII Text Character using the currently selected -; 8x8 font on the active display page. It would be a simple -; exercise to make this routine process variable height fonts. -; -; ENTRY: CharNum = ASCII character # to draw -; Xpos = X position to draw Character at -; Ypos = Y position of to draw Character at -; ColorF = Color to draw text character in -; ColorB = Color to set background to -; -; EXIT: No meaningful values returned -; - -GPC_STACK STRUC - GPC_Width DW ? ; Screen Width-1 - GPC_Lines DB ?,? ; Scan lines to Decode - GPC_T_SETS DW ? ; Saved Charset Segment - GPC_T_SETO DW ? ; Saved Charset Offset - DW ?x4 ; DI, SI, DS, BP - DD ? ; Caller - GPC_ColorB DB ?,? ; Background Color - GPC_ColorF DB ?,? ; Text Color - GPC_Ypos DW ? ; Y Position to Print at - GPC_Xpos DW ? ; X position to Print at - GPC_Char DB ?,? ; Character to Print -GPC_STACK ENDS - - PUBLIC GPRINTC - -GPRINTC PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - SUB SP, 8 ; Allocate WorkSpace on Stack - MOV BP, SP ; Set up Stack Frame - - LES DI, d CURRENT_PAGE ; Point to Active VGA Page - - MOV AX, SCREEN_WIDTH ; Get Logical Line Width - MOV BX, AX ; BX = Screen Width - DEC BX ; = Screen Width-1 - MOV [BP].GPC_Width, BX ; Save for later use - - MUL [BP].GPC_Ypos ; Start of Line = Ypos * Width - ADD DI, AX ; DI -> Start of Line Ypos - - MOV AX, [BP].GPC_Xpos ; Get Xpos of Character - MOV CX, AX ; Save Copy of Xpos - SHR AX, 2 ; Bytes into Line = Xpos/4 - ADD DI, AX ; DI -> (Xpos, Ypos) - - ;Get Source ADDR of Character Bit Map & Save - - MOV AL, [BP].GPC_Char ; Get Character # - TEST AL, 080h ; Is Hi Bit Set? - JZ @GPC_LowChar ; Nope, use low char set ptr - - AND AL, 07Fh ; Mask Out Hi Bit - MOV BX, CHARSET_HI ; BX = Char Set Ptr:Offset - MOV DX, CHARSET_HI+2 ; DX = Char Set Ptr:Segment - JMP s @GPC_Set_Char ; Go Setup Character Ptr - -@GPC_LowChar: - - MOV BX, CHARSET_LOW ; BX = Char Set Ptr:Offset - MOV DX, CHARSET_LOW+2 ; DX = Char Set Ptr:Segment - -@GPC_Set_Char: - MOV [BP].GPC_T_SETS, DX ; Save Segment on Stack - - MOV AH, 0 ; Valid #'s are 0..127 - SHL AX, 3 ; * 8 Bytes Per Bitmap - ADD BX, AX ; BX = Offset of Selected char - MOV [BP].GPC_T_SETO, BX ; Save Offset on Stack - - AND CX, PLANE_BITS ; Get Plane # - MOV CH, ALL_PLANES ; Get Initial Plane mask - SHL CH, CL ; And shift into position - AND CH, ALL_PLANES ; And mask to lower nibble - - MOV AL, 04 ; 4-Plane # = # of initial - SUB AL, CL ; shifts to align bit mask - MOV CL, AL ; Shift Count for SHL - - ;Get segment of character map - - OUT_8 SC_Index, MAP_MASK ; Setup Plane selections - INC DX ; DX -> SC_Data - - MOV AL, 08 ; 8 Lines to Process - MOV [BP].GPC_Lines, AL ; Save on Stack - - MOV DS, [BP].GPC_T_SETS ; Point to character set - -@GPC_DECODE_CHAR_BYTE: - - MOV SI, [BP].GPC_T_SETO ; Get DS:SI = String - - MOV BH, [SI] ; Get Bit Map - INC SI ; Point to Next Line - MOV [BP].GPC_T_SETO, SI ; And save new Pointer... - - CLR AX ; Clear AX - - CLR BL ; Clear BL - ROL BX, CL ; BL holds left edge bits - MOV SI, BX ; Use as Table Index - AND SI, CHAR_BITS ; Get Low Bits - MOV AL, Char_Plane_Data[SI] ; Get Mask in AL - JZ @GPC_NO_LEFT1BITS ; Skip if No Pixels to set - - MOV AH, [BP].GPC_ColorF ; Get Foreground Color - OUT DX, AL ; Set up Screen Mask - MOV ES:[DI], AH ; Write Foreground color - -@GPC_NO_LEFT1BITS: - XOR AL, CH ; Invert mask for Background - JZ @GPC_NO_LEFT0BITS ; Hey, no need for this - - MOV AH, [BP].GPC_ColorB ; Get background Color - OUT DX, AL ; Set up Screen Mask - MOV ES:[DI], AH ; Write Foreground color - - ;Now Do Middle/Last Band - -@GPC_NO_LEFT0BITS: - INC DI ; Point to next Byte - ROL BX, 4 ; Shift 4 bits - - MOV SI, BX ; Make Lookup Pointer - AND SI, CHAR_BITS ; Get Low Bits - MOV AL, Char_Plane_Data[SI] ; Get Mask in AL - JZ @GPC_NO_MIDDLE1BITS ; Skip if no pixels to set - - MOV AH, [BP].GPC_ColorF ; Get Foreground Color - OUT DX, AL ; Set up Screen Mask - MOV ES:[DI], AH ; Write Foreground color - -@GPC_NO_MIDDLE1BITS: - XOR AL, ALL_PLANES ; Invert mask for Background - JZ @GPC_NO_MIDDLE0BITS ; Hey, no need for this - - MOV AH, [BP].GPC_ColorB ; Get background Color - OUT DX, AL ; Set up Screen Mask - MOV ES:[DI], AH ; Write Foreground color - -@GPC_NO_MIDDLE0BITS: - XOR CH, ALL_PLANES ; Invert Clip Mask - CMP CL, 4 ; Aligned by 4? - JZ @GPC_NEXT_LINE ; If so, Exit now.. - - INC DI ; Point to next Byte - ROL BX, 4 ; Shift 4 bits - - MOV SI, BX ; Make Lookup Pointer - AND SI, CHAR_BITS ; Get Low Bits - MOV AL, Char_Plane_Data[SI] ; Get Mask in AL - JZ @GPC_NO_RIGHT1BITS ; Skip if No Pixels to set - - MOV AH, [BP].GPC_ColorF ; Get Foreground Color - OUT DX, AL ; Set up Screen Mask - MOV ES:[DI], AH ; Write Foreground color - -@GPC_NO_RIGHT1BITS: - - XOR AL, CH ; Invert mask for Background - JZ @GPC_NO_RIGHT0BITS ; Hey, no need for this - - MOV AH, [BP].GPC_ColorB ; Get background Color - OUT DX, AL ; Set up Screen Mask - MOV ES:[DI], AH ; Write Foreground color - -@GPC_NO_RIGHT0BITS: - DEC DI ; Adjust for Next Line Advance - -@GPC_NEXT_LINE: - ADD DI, [BP].GPC_Width ; Point to Next Line - XOR CH, CHAR_BITS ; Flip the Clip mask back - - DEC [BP].GPC_Lines ; Count Down Lines - JZ @GPC_EXIT ; Ok... Done! - - JMP @GPC_DECODE_CHAR_BYTE ; Again! Hey! - -@GPC_EXIT: - ADD SP, 08 ; Deallocate stack workspace - POPx DI, SI, DS, BP ; Restore Saved Registers - RET 10 ; Exit and Clean up Stack - -GPRINTC ENDP - - -;========================================== -;TGPRINTC (CharNum%, Xpos%, Ypos%, ColorF%) -;========================================== -; -; Transparently draws an ASCII Text Character using the -; currently selected 8x8 font on the active display page. -; -; ENTRY: CharNum = ASCII character # to draw -; Xpos = X position to draw Character at -; Ypos = Y position of to draw Character at -; ColorF = Color to draw text character in -; -; EXIT: No meaningful values returned -; - -TGP_STACK STRUC - TGP_Width DW ? ; Screen Width-1 - TGP_Lines DB ?,? ; Scan lines to Decode - TGP_T_SETS DW ? ; Saved Charset Segment - TGP_T_SETO DW ? ; Saved Charset Offset - DW ?x4 ; DI, SI, DS, BP - DD ? ; Caller - TGP_ColorF DB ?,? ; Text Color - TGP_Ypos DW ? ; Y Position to Print at - TGP_Xpos DW ? ; X position to Print at - TGP_Char DB ?,? ; Character to Print -TGP_STACK ENDS - - PUBLIC TGPRINTC - -TGPRINTC PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - SUB SP, 8 ; Allocate WorkSpace on Stack - MOV BP, SP ; Set up Stack Frame - - LES DI, d CURRENT_PAGE ; Point to Active VGA Page - - MOV AX, SCREEN_WIDTH ; Get Logical Line Width - MOV BX, AX ; BX = Screen Width - DEC BX ; = Screen Width-1 - MOV [BP].TGP_Width, BX ; Save for later use - - MUL [BP].TGP_Ypos ; Start of Line = Ypos * Width - ADD DI, AX ; DI -> Start of Line Ypos - - MOV AX, [BP].TGP_Xpos ; Get Xpos of Character - MOV CX, AX ; Save Copy of Xpos - SHR AX, 2 ; Bytes into Line = Xpos/4 - ADD DI, AX ; DI -> (Xpos, Ypos) - - ;Get Source ADDR of Character Bit Map & Save - - MOV AL, [BP].TGP_Char ; Get Character # - TEST AL, 080h ; Is Hi Bit Set? - JZ @TGP_LowChar ; Nope, use low char set ptr - - AND AL, 07Fh ; Mask Out Hi Bit - MOV BX, CHARSET_HI ; BX = Char Set Ptr:Offset - MOV DX, CHARSET_HI+2 ; DX = Char Set Ptr:Segment - JMP s @TGP_Set_Char ; Go Setup Character Ptr - -@TGP_LowChar: - - MOV BX, CHARSET_LOW ; BX = Char Set Ptr:Offset - MOV DX, CHARSET_LOW+2 ; DX = Char Set Ptr:Segment - -@TGP_Set_Char: - MOV [BP].TGP_T_SETS, DX ; Save Segment on Stack - - MOV AH, 0 ; Valid #'s are 0..127 - SHL AX, 3 ; * 8 Bytes Per Bitmap - ADD BX, AX ; BX = Offset of Selected char - MOV [BP].TGP_T_SETO, BX ; Save Offset on Stack - - AND CX, PLANE_BITS ; Get Plane # - MOV CH, ALL_PLANES ; Get Initial Plane mask - SHL CH, CL ; And shift into position - AND CH, ALL_PLANES ; And mask to lower nibble - - MOV AL, 04 ; 4-Plane # = # of initial - SUB AL, CL ; shifts to align bit mask - MOV CL, AL ; Shift Count for SHL - - ;Get segment of character map - - OUT_8 SC_Index, MAP_MASK ; Setup Plane selections - INC DX ; DX -> SC_Data - - MOV AL, 08 ; 8 Lines to Process - MOV [BP].TGP_Lines, AL ; Save on Stack - - MOV DS, [BP].TGP_T_SETS ; Point to character set - -@TGP_DECODE_CHAR_BYTE: - - MOV SI, [BP].TGP_T_SETO ; Get DS:SI = String - - MOV BH, [SI] ; Get Bit Map - INC SI ; Point to Next Line - MOV [BP].TGP_T_SETO, SI ; And save new Pointer... - - MOV AH, [BP].TGP_ColorF ; Get Foreground Color - - CLR BL ; Clear BL - ROL BX, CL ; BL holds left edge bits - MOV SI, BX ; Use as Table Index - AND SI, CHAR_BITS ; Get Low Bits - MOV AL, Char_Plane_Data[SI] ; Get Mask in AL - JZ @TGP_NO_LEFT1BITS ; Skip if No Pixels to set - - OUT DX, AL ; Set up Screen Mask - MOV ES:[DI], AH ; Write Foreground color - - ;Now Do Middle/Last Band - -@TGP_NO_LEFT1BITS: - - INC DI ; Point to next Byte - ROL BX, 4 ; Shift 4 bits - - MOV SI, BX ; Make Lookup Pointer - AND SI, CHAR_BITS ; Get Low Bits - MOV AL, Char_Plane_Data[SI] ; Get Mask in AL - JZ @TGP_NO_MIDDLE1BITS ; Skip if no pixels to set - - OUT DX, AL ; Set up Screen Mask - MOV ES:[DI], AH ; Write Foreground color - -@TGP_NO_MIDDLE1BITS: - XOR CH, ALL_PLANES ; Invert Clip Mask - CMP CL, 4 ; Aligned by 4? - JZ @TGP_NEXT_LINE ; If so, Exit now.. - - INC DI ; Point to next Byte - ROL BX, 4 ; Shift 4 bits - - MOV SI, BX ; Make Lookup Pointer - AND SI, CHAR_BITS ; Get Low Bits - MOV AL, Char_Plane_Data[SI] ; Get Mask in AL - JZ @TGP_NO_RIGHT1BITS ; Skip if No Pixels to set - - OUT DX, AL ; Set up Screen Mask - MOV ES:[DI], AH ; Write Foreground color - -@TGP_NO_RIGHT1BITS: - - DEC DI ; Adjust for Next Line Advance - -@TGP_NEXT_LINE: - ADD DI, [BP].TGP_Width ; Point to Next Line - XOR CH, CHAR_BITS ; Flip the Clip mask back - - DEC [BP].TGP_Lines ; Count Down Lines - JZ @TGP_EXIT ; Ok... Done! - - JMP @TGP_DECODE_CHAR_BYTE ; Again! Hey! - -@TGP_EXIT: - ADD SP, 08 ; Deallocate stack workspace - POPx DI, SI, DS, BP ; Restore Saved Registers - RET 8 ; Exit and Clean up Stack - -TGPRINTC ENDP - - -;=============================================================== -;PRINT_STR (SEG String, MaxLen%, Xpos%, Ypos%, ColorF%, ColorB%) -;=============================================================== -; -; Routine to quickly Print a null terminated ASCII string on the -; active display page up to a maximum length. -; -; ENTRY: String = Far Pointer to ASCII string to print -; MaxLen = # of characters to print if no null found -; Xpos = X position to draw Text at -; Ypos = Y position of to draw Text at -; ColorF = Color to draw text in -; ColorB = Color to set background to -; -; EXIT: No meaningful values returned -; - -PS_STACK STRUC - DW ?x4 ; DI, SI, DS, BP - DD ? ; Caller - PS_ColorB DW ? ; Background Color - PS_ColorF DW ? ; Text Color - PS_Ypos DW ? ; Y Position to Print at - PS_Xpos DW ? ; X position to Print at - PS_Len DW ? ; Maximum Length of string to print - PS_Text DW ?,? ; Far Ptr to Text String -PS_STACK ENDS - - PUBLIC PRINT_STR - -PRINT_STR PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - MOV BP, SP ; Set up Stack Frame - -@PS_Print_It: - - MOV CX, [BP].PS_Len ; Get Remaining text Length - JCXZ @PS_Exit ; Exit when out of text - - LES DI, d [BP].PS_Text ; ES:DI -> Current Char in Text - MOV AL, ES:[DI] ; AL = Text Character - AND AX, 00FFh ; Clear High Word - JZ @PS_Exit ; Exit if null character - - DEC [BP].PS_Len ; Remaining Text length-- - INC [BP].PS_Text ; Point to Next text char - - ; Set up Call to GPRINTC - - PUSH AX ; Set Character Parameter - MOV BX, [BP].PS_Xpos ; Get Xpos - PUSH BX ; Set Xpos Parameter - ADD BX, 8 ; Advance 1 Char to Right - MOV [BP].PS_Xpos, BX ; Save for next time through - - MOV BX, [BP].PS_Ypos ; Get Ypos - PUSH BX ; Set Ypos Parameter - - MOV BX, [BP].PS_ColorF ; Get Text Color - PUSH BX ; Set ColorF Parameter - - MOV BX, [BP].PS_ColorB ; Get Background Color - PUSH BX ; Set ColorB Parameter - - CALL f GPRINTC ; Print Character! - JMP s @PS_Print_It ; Process next character - -@PS_Exit: - POPx DI, SI, DS, BP ; Restore Saved Registers - RET 14 ; Exit and Clean up Stack - -PRINT_STR ENDP - - -;================================================================ -;TPRINT_STR (SEG String, MaxLen%, Xpos%, Ypos%, ColorF%, ColorB%) -;================================================================ -; -; Routine to quickly transparently Print a null terminated ASCII -; string on the active display page up to a maximum length. -; -; ENTRY: String = Far Pointer to ASCII string to print -; MaxLen = # of characters to print if no null found -; Xpos = X position to draw Text at -; Ypos = Y position of to draw Text at -; ColorF = Color to draw text in -; -; EXIT: No meaningful values returned -; - -TPS_STACK STRUC - DW ?x4 ; DI, SI, DS, BP - DD ? ; Caller - TPS_ColorF DW ? ; Text Color - TPS_Ypos DW ? ; Y Position to Print at - TPS_Xpos DW ? ; X position to Print at - TPS_Len DW ? ; Maximum Length of string to print - TPS_Text DW ?,? ; Far Ptr to Text String -TPS_STACK ENDS - - PUBLIC TPRINT_STR - -TPRINT_STR PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - MOV BP, SP ; Set up Stack Frame - -@TPS_Print_It: - - MOV CX, [BP].TPS_Len ; Get Remaining text Length - JCXZ @TPS_Exit ; Exit when out of text - - LES DI, d [BP].TPS_Text ; ES:DI -> Current Char in Text - MOV AL, ES:[DI] ; AL = Text Character - AND AX, 00FFh ; Clear High Word - JZ @TPS_Exit ; Exit if null character - - DEC [BP].TPS_Len ; Remaining Text length-- - INC [BP].TPS_Text ; Point to Next text char - - ; Set up Call to TGPRINTC - - PUSH AX ; Set Character Parameter - MOV BX, [BP].TPS_Xpos ; Get Xpos - PUSH BX ; Set Xpos Parameter - ADD BX, 8 ; Advance 1 Char to Right - MOV [BP].TPS_Xpos, BX ; Save for next time through - - MOV BX, [BP].TPS_Ypos ; Get Ypos - PUSH BX ; Set Ypos Parameter - - MOV BX, [BP].TPS_ColorF ; Get Text Color - PUSH BX ; Set ColorF Parameter - - CALL f TGPRINTC ; Print Character! - JMP s @TPS_Print_It ; Process next character - -@TPS_Exit: - POPx DI, SI, DS, BP ; Restore Saved Registers - RET 12 ; Exit and Clean up Stack - -TPRINT_STR ENDP - - -;=========================================== -;SET_DISPLAY_FONT(SEG FontData, FontNumber%) -;=========================================== -; -; Allows the user to specify their own font data for -; wither the lower or upper 128 characters. -; -; ENTRY: FontData = Far Pointer to Font Bitmaps -; FontNumber = Which half of set this is -; = 0, Lower 128 characters -; = 1, Upper 128 characters -; -; EXIT: No meaningful values returned -; - -SDF_STACK STRUC - DW ? ; BP - DD ? ; Caller - SDF_Which DW ? ; Hi Table/Low Table Flag - SDF_Font DD ? ; Far Ptr to Font Table -SDF_STACK ENDS - - PUBLIC SET_DISPLAY_FONT - -SET_DISPLAY_FONT PROC FAR - - PUSH BP ; Preserve Registers - MOV BP, SP ; Set up Stack Frame - - LES DI, [BP].SDF_Font ; Get Far Ptr to Font - - MOV SI, o CHARSET_LOW ; Assume Lower 128 chars - TEST [BP].SDF_Which, 1 ; Font #1 selected? - JZ @SDF_Set_Font ; If not, skip ahead - - MOV SI, o CHARSET_HI ; Ah, really it's 128-255 - -@SDF_Set_Font: - MOV [SI], DI ; Set Font Pointer Offset - MOV [SI+2], ES ; Set Font Pointer Segment - - POP BP ; Restore Registers - RET 6 ; We are Done.. Outa here - -SET_DISPLAY_FONT ENDP - - - ; ===== BITMAP (SPRITE) DISPLAY ROUTINES ===== - -;====================================================== -;DRAW_BITMAP (SEG Image, Xpos%, Ypos%, Width%, Height%) -;====================================================== -; -; Draws a variable sized Graphics Bitmap such as a -; picture or an Icon on the current Display Page in -; Mode X. The Bitmap is stored in a linear byte array -; corresponding to (0,0) (1,0), (2,0) .. (Width, Height) -; This is the same linear manner as mode 13h graphics. -; -; ENTRY: Image = Far Pointer to Bitmap Data -; Xpos = X position to Place Upper Left pixel at -; Ypos = Y position to Place Upper Left pixel at -; Width = Width of the Bitmap in Pixels -; Height = Height of the Bitmap in Pixels -; -; EXIT: No meaningful values returned -; - -DB_STACK STRUC - DB_LineO DW ? ; Offset to Next Line - DB_PixCount DW ? ; (Minimum) # of Pixels/Line - DB_Start DW ? ; Addr of Upper Left Pixel - DB_PixSkew DW ? ; # of bytes to Adjust EOL - DB_SkewFlag DW ? ; Extra Pix on Plane Flag - DW ?x4 ; DI, SI, DS, BP - DD ? ; Caller - DB_Height DW ? ; Height of Bitmap in Pixels - DB_Width DW ? ; Width of Bitmap in Pixels - DB_Ypos DW ? ; Y position to Draw Bitmap at - DB_Xpos DW ? ; X position to Draw Bitmap at - DB_Image DD ? ; Far Pointer to Graphics Bitmap -DB_STACK ENDS - - PUBLIC DRAW_BITMAP - -DRAW_BITMAP PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - SUB SP, 10 ; Allocate workspace - MOV BP, SP ; Set up Stack Frame - - LES DI, d CURRENT_PAGE ; Point to Active VGA Page - CLD ; Direction Flag = Forward - - MOV AX, [BP].DB_Ypos ; Get UL Corner Ypos - MUL SCREEN_WIDTH ; AX = Offset to Line Ypos - - MOV BX, [BP].DB_Xpos ; Get UL Corner Xpos - MOV CL, BL ; Save Plane # in CL - SHR BX, 2 ; Xpos/4 = Offset Into Line - - ADD DI, AX ; ES:DI -> Start of Line - ADD DI, BX ; ES:DI -> Upper Left Pixel - MOV [BP].DB_Start, DI ; Save Starting Addr - - ; Compute line to line offset - - MOV BX, [BP].DB_Width ; Get Width of Image - MOV DX, BX ; Save Copy in DX - SHR BX, 2 ; /4 = width in bands - MOV AX, SCREEN_WIDTH ; Get Screen Width - SUB AX, BX ; - (Bitmap Width/4) - - MOV [BP].DB_LineO, AX ; Save Line Width offset - MOV [BP].DB_PixCount, BX ; Minimum # pix to copy - - AND DX, PLANE_BITS ; Get "partial band" size (0-3) - MOV [BP].DB_PixSkew, DX ; Also End of Line Skew - MOV [BP].DB_SkewFlag, DX ; Save as Flag/Count - - AND CX, PLANE_BITS ; CL = Starting Plane # - MOV AX, MAP_MASK_PLANE2 ; Plane Mask & Plane Select - SHL AH, CL ; Select correct Plane - OUT_16 SC_Index, AX ; Select Plane... - MOV BH, AH ; BH = Saved Plane Mask - MOV BL, 4 ; BL = Planes to Copy - -@DB_COPY_PLANE: - - LDS SI, [BP].DB_Image ; DS:SI-> Source Image - MOV DX, [BP].DB_Height ; # of Lines to Copy - MOV DI, [BP].DB_Start ; ES:DI-> Dest pos - -@DB_COPY_LINE: - MOV CX, [BP].DB_PixCount ; Min # to copy - - TEST CL, 0FCh ; 16+PixWide? - JZ @DB_COPY_REMAINDER ; Nope... - - ; Pixel Copy loop has been unrolled to x4 - -@DB_COPY_LOOP: - MOVSB ; Copy Bitmap Pixel - ADD SI, 3 ; Skip to Next Byte in same plane - MOVSB ; Copy Bitmap Pixel - ADD SI, 3 ; Skip to Next Byte in same plane - MOVSB ; Copy Bitmap Pixel - ADD SI, 3 ; Skip to Next Byte in same plane - MOVSB ; Copy Bitmap Pixel - ADD SI, 3 ; Skip to Next Byte in same plane - - SUB CL, 4 ; Pixels to Copy=-4 - TEST CL, 0FCh ; 4+ Pixels Left? - JNZ @DB_COPY_LOOP ; if so, do another block - -@DB_COPY_REMAINDER: - JCXZ @DB_NEXT_LINE ; Any Pixels left on line - -@DB_COPY2: - MOVSB ; Copy Bitmap Pixel - ADD SI,3 ; Skip to Next Byte in same plane - LOOPx CX, @DB_COPY2 ; Pixels to Copy--, Loop until done - -@DB_NEXT_LINE: - - ; any Partial Pixels? (some planes only) - - OR CX, [BP].DB_SkewFlag ; Get Skew Count - JZ @DB_NEXT2 ; if no partial pixels - - MOVSB ; Copy Bitmap Pixel - DEC DI ; Back up to align - DEC SI ; Back up to align - -@DB_NEXT2: - ADD SI, [BP].DB_PixSkew ; Adjust Skew - ADD DI, [BP].DB_LineO ; Set to Next Display Line - LOOPx DX, @DB_COPY_LINE ; Lines to Copy--, Loop if more - - ; Copy Next Plane.... - - DEC BL ; Planes to Go-- - JZ @DB_Exit ; Hey! We are done - - ROL BH, 1 ; Next Plane in line... - OUT_8 SC_Data, BH ; Select Plane - - CMP AL, 12h ; Carry Set if AL=11h - ADC [BP].DB_Start, 0 ; Screen Addr =+Carry - INC w [BP].DB_Image ; Start @ Next Byte - - SUB [BP].DB_SkewFlag, 1 ; Reduce Planes to Skew - ADC [BP].DB_SkewFlag, 0 ; Back to 0 if it was -1 - - JMP s @DB_COPY_PLANE ; Go Copy the Next Plane - -@DB_Exit: - ADD SP, 10 ; Deallocate workspace - POPx DI, SI, DS, BP ; Restore Saved Registers - RET 12 ; Exit and Clean up Stack - -DRAW_BITMAP ENDP - - -;======================================================= -;TDRAW_BITMAP (SEG Image, Xpos%, Ypos%, Width%, Height%) -;======================================================= -; -; Transparently Draws a variable sized Graphics Bitmap -; such as a picture or an Icon on the current Display Page -; in Mode X. Pixels with a value of 0 are not drawn, -; leaving the previous "background" contents intact. -; -; The Bitmap format is the same as for the DRAW_BITMAP function. -; -; ENTRY: Image = Far Pointer to Bitmap Data -; Xpos = X position to Place Upper Left pixel at -; Ypos = Y position to Place Upper Left pixel at -; Width = Width of the Bitmap in Pixels -; Height = Height of the Bitmap in Pixels -; -; EXIT: No meaningful values returned -; - -TB_STACK STRUC - TB_LineO DW ? ; Offset to Next Line - TB_PixCount DW ? ; (Minimum) # of Pixels/Line - TB_Start DW ? ; Addr of Upper Left Pixel - TB_PixSkew DW ? ; # of bytes to Adjust EOL - TB_SkewFlag DW ? ; Extra Pix on Plane Flag - DW ?x4 ; DI, SI, DS, BP - DD ? ; Caller - TB_Height DW ? ; Height of Bitmap in Pixels - TB_Width DW ? ; Width of Bitmap in Pixels - TB_Ypos DW ? ; Y position to Draw Bitmap at - TB_Xpos DW ? ; X position to Draw Bitmap at - TB_Image DD ? ; Far Pointer to Graphics Bitmap -TB_STACK ENDS - - PUBLIC TDRAW_BITMAP - -TDRAW_BITMAP PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - SUB SP, 10 ; Allocate workspace - MOV BP, SP ; Set up Stack Frame - - LES DI, d CURRENT_PAGE ; Point to Active VGA Page - CLD ; Direction Flag = Forward - - MOV AX, [BP].TB_Ypos ; Get UL Corner Ypos - MUL SCREEN_WIDTH ; AX = Offset to Line Ypos - - MOV BX, [BP].TB_Xpos ; Get UL Corner Xpos - MOV CL, BL ; Save Plane # in CL - SHR BX, 2 ; Xpos/4 = Offset Into Line - - ADD DI, AX ; ES:DI -> Start of Line - ADD DI, BX ; ES:DI -> Upper Left Pixel - MOV [BP].TB_Start, DI ; Save Starting Addr - - ; Compute line to line offset - - MOV BX, [BP].TB_Width ; Get Width of Image - MOV DX, BX ; Save Copy in DX - SHR BX, 2 ; /4 = width in bands - MOV AX, SCREEN_WIDTH ; Get Screen Width - SUB AX, BX ; - (Bitmap Width/4) - - MOV [BP].TB_LineO, AX ; Save Line Width offset - MOV [BP].TB_PixCount, BX ; Minimum # pix to copy - - AND DX, PLANE_BITS ; Get "partial band" size (0-3) - MOV [BP].TB_PixSkew, DX ; Also End of Line Skew - MOV [BP].TB_SkewFlag, DX ; Save as Flag/Count - - AND CX, PLANE_BITS ; CL = Starting Plane # - MOV AX, MAP_MASK_PLANE2 ; Plane Mask & Plane Select - SHL AH, CL ; Select correct Plane - OUT_16 SC_Index, AX ; Select Plane... - MOV BH, AH ; BH = Saved Plane Mask - MOV BL, 4 ; BL = Planes to Copy - -@TB_COPY_PLANE: - - LDS SI, [BP].TB_Image ; DS:SI-> Source Image - MOV DX, [BP].TB_Height ; # of Lines to Copy - MOV DI, [BP].TB_Start ; ES:DI-> Dest pos - - ; Here AH is set with the value to be considered - ; "Transparent". It can be changed! - - MOV AH, 0 ; Value to Detect 0 - -@TB_COPY_LINE: - MOV CX, [BP].TB_PixCount ; Min # to copy - - TEST CL, 0FCh ; 16+PixWide? - JZ @TB_COPY_REMAINDER ; Nope... - - ; Pixel Copy loop has been unrolled to x4 - -@TB_COPY_LOOP: - LODSB ; Get Pixel Value in AL - ADD SI, 3 ; Skip to Next Byte in same plane - CMP AL, AH ; It is "Transparent"? - JE @TB_SKIP_01 ; Skip ahead if so - MOV ES:[DI], AL ; Copy Pixel to VGA screen - -@TB_SKIP_01: - LODSB ; Get Pixel Value in AL - ADD SI, 3 ; Skip to Next Byte in same plane - CMP AL, AH ; It is "Transparent"? - JE @TB_SKIP_02 ; Skip ahead if so - MOV ES:[DI+1], AL ; Copy Pixel to VGA screen - -@TB_SKIP_02: - LODSB ; Get Pixel Value in AL - ADD SI, 3 ; Skip to Next Byte in same plane - CMP AL, AH ; It is "Transparent"? - JE @TB_SKIP_03 ; Skip ahead if so - MOV ES:[DI+2], AL ; Copy Pixel to VGA screen - -@TB_SKIP_03: - LODSB ; Get Pixel Value in AL - ADD SI, 3 ; Skip to Next Byte in same plane - CMP AL, AH ; It is "Transparent"? - JE @TB_SKIP_04 ; Skip ahead if so - MOV ES:[DI+3], AL ; Copy Pixel to VGA screen - -@TB_SKIP_04: - ADD DI, 4 ; Adjust Pixel Write Location - SUB CL, 4 ; Pixels to Copy=-4 - TEST CL, 0FCh ; 4+ Pixels Left? - JNZ @TB_COPY_LOOP ; if so, do another block - -@TB_COPY_REMAINDER: - JCXZ @TB_NEXT_LINE ; Any Pixels left on line - -@TB_COPY2: - LODSB ; Get Pixel Value in AL - ADD SI, 3 ; Skip to Next Byte in same plane - CMP AL, AH ; It is "Transparent"? - JE @TB_SKIP_05 ; Skip ahead if so - MOV ES:[DI], AL ; Copy Pixel to VGA screen - -@TB_SKIP_05: - INC DI ; Advance Dest Addr - LOOPx CX, @TB_COPY2 ; Pixels to Copy--, Loop until done - -@TB_NEXT_LINE: - - ; any Partial Pixels? (some planes only) - - OR CX, [BP].TB_SkewFlag ; Get Skew Count - JZ @TB_NEXT2 ; if no partial pixels - - LODSB ; Get Pixel Value in AL - DEC SI ; Backup to Align - CMP AL, AH ; It is "Transparent"? - JE @TB_NEXT2 ; Skip ahead if so - MOV ES:[DI], AL ; Copy Pixel to VGA screen - -@TB_NEXT2: - ADD SI, [BP].TB_PixSkew ; Adjust Skew - ADD DI, [BP].TB_LineO ; Set to Next Display Line - LOOPx DX, @TB_COPY_LINE ; Lines to Copy--, Loop if More - - ;Copy Next Plane.... - - DEC BL ; Planes to Go-- - JZ @TB_Exit ; Hey! We are done - - ROL BH, 1 ; Next Plane in line... - OUT_8 SC_Data, BH ; Select Plane - - CMP AL, 12h ; Carry Set if AL=11h - ADC [BP].TB_Start, 0 ; Screen Addr =+Carry - INC w [BP].TB_Image ; Start @ Next Byte - - SUB [BP].TB_SkewFlag, 1 ; Reduce Planes to Skew - ADC [BP].TB_SkewFlag, 0 ; Back to 0 if it was -1 - - JMP @TB_COPY_PLANE ; Go Copy the next Plane - -@TB_Exit: - ADD SP, 10 ; Deallocate workspace - POPx DI, SI, DS, BP ; Restore Saved Registers - RET 12 ; Exit and Clean up Stack - -TDRAW_BITMAP ENDP - - - ; ==== VIDEO MEMORY to VIDEO MEMORY COPY ROUTINES ===== - -;================================== -;COPY_PAGE (SourcePage%, DestPage%) -;================================== -; -; Duplicate on display page onto another -; -; ENTRY: SourcePage = Display Page # to Duplicate -; DestPage = Display Page # to hold copy -; -; EXIT: No meaningful values returned -; - -CP_STACK STRUC - DW ?x4 ; DI, SI, DS, BP - DD ? ; Caller - CP_DestP DW ? ; Page to hold copied image - CP_SourceP DW ? ; Page to Make copy from -CP_STACK ENDS - - PUBLIC COPY_PAGE - -COPY_PAGE PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - MOV BP, SP ; Set up Stack Frame - CLD ; Block Xfer Forwards - - ; Make sure Page #'s are valid - - MOV AX, [BP].CP_SourceP ; Get Source Page # - CMP AX, LAST_PAGE ; is it > Max Page #? - JAE @CP_Exit ; if so, abort - - MOV BX, [BP].CP_DestP ; Get Destination Page # - CMP BX, LAST_PAGE ; is it > Max Page #? - JAE @CP_Exit ; if so, abort - - CMP AX, BX ; Pages #'s the same? - JE @CP_Exit ; if so, abort - - ; Setup DS:SI and ES:DI to Video Pages - - SHL BX, 1 ; Scale index to Word - MOV DI, PAGE_ADDR[BX] ; Offset to Dest Page - - MOV BX, AX ; Index to Source page - SHL BX, 1 ; Scale index to Word - MOV SI, PAGE_ADDR[BX] ; Offset to Source Page - - MOV CX, PAGE_SIZE ; Get size of Page - MOV AX, CURRENT_SEGMENT ; Get Video Mem Segment - MOV ES, AX ; ES:DI -> Dest Page - MOV DS, AX ; DS:SI -> Source Page - - ; Setup VGA registers for Mem to Mem copy - - OUT_16 GC_Index, LATCHES_ON ; Data from Latches = on - OUT_16 SC_Index, ALL_PLANES_ON ; Copy all Planes - - ; Note.. Do *NOT* use MOVSW or MOVSD - they will - ; Screw with the latches which are 8 bits x 4 - - REP MOVSB ; Copy entire Page! - - ; Reset VGA for normal memory access - - OUT_16 GC_Index, LATCHES_OFF ; Data from Latches = off - -@CP_Exit: - POPx DI, SI, DS, BP ; Restore Saved Registers - RET 4 ; Exit and Clean up Stack - -COPY_PAGE ENDP - - -;========================================================================== -;COPY_BITMAP (SourcePage%, X1%, Y1%, X2%, Y2%, DestPage%, DestX1%, DestY1%) -;========================================================================== -; -; Copies a Bitmap Image from one Display Page to Another -; This Routine is Limited to copying Images with the same -; Plane Alignment. To Work: (X1 MOD 4) must = (DestX1 MOD 4) -; Copying an Image to the Same Page is supported, but results -; may be defined when the when the rectangular areas -; (X1, Y1) - (X2, Y2) and (DestX1, DestY1) - -; (DestX1+(X2-X1), DestY1+(Y2-Y1)) overlap... -; No Paramter checking to done to insure that -; X2 >= X1 and Y2 >= Y1. Be Careful... -; -; ENTRY: SourcePage = Display Page # with Source Image -; X1 = Upper Left Xpos of Source Image -; Y1 = Upper Left Ypos of Source Image -; X2 = Lower Right Xpos of Source Image -; Y2 = Lower Right Ypos of Source Image -; DestPage = Display Page # to copy Image to -; DestX1 = Xpos to Copy UL Corner of Image to -; DestY1 = Ypos to Copy UL Corner of Image to -; -; EXIT: AX = Success Flag: 0 = Failure / -1= Success -; - -CB_STACK STRUC - CB_Height DW ? ; Height of Image in Lines - CB_Width DW ? ; Width of Image in "bands" - DW ?x4 ; DI, SI, DS, BP - DD ? ; Caller - CB_DestY1 DW ? ; Destination Ypos - CB_DestX1 DW ? ; Destination Xpos - CB_DestP DW ? ; Page to Copy Bitmap To - CB_Y2 DW ? ; LR Ypos of Image - CB_X2 DW ? ; LR Xpos of Image - CB_Y1 DW ? ; UL Ypos of Image - CB_X1 DW ? ; UL Xpos of Image - CB_SourceP DW ? ; Page containing Source Bitmap -CB_STACK ENDS - - PUBLIC COPY_BITMAP - -COPY_BITMAP PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - SUB SP, 4 ; Allocate WorkSpace on Stack - MOV BP, SP ; Set up Stack Frame - - ; Prep Registers (and keep jumps short!) - - MOV ES, CURRENT_SEGMENT ; ES -> VGA Ram - CLD ; Block Xfer Forwards - - ; Make sure Parameters are valid - - MOV BX, [BP].CB_SourceP ; Get Source Page # - CMP BX, LAST_PAGE ; is it > Max Page #? - JAE @CB_Abort ; if so, abort - - MOV CX, [BP].CB_DestP ; Get Destination Page # - CMP CX, LAST_PAGE ; is it > Max Page #? - JAE @CB_Abort ; if so, abort - - MOV AX, [BP].CB_X1 ; Get Source X1 - XOR AX, [BP].CB_DestX1 ; Compare Bits 0-1 - AND AX, PLANE_BITS ; Check Plane Bits - JNZ @CB_Abort ; They should cancel out - - ; Setup for Copy processing - - OUT_8 SC_INDEX, MAP_MASK ; Set up for Plane Select - OUT_16 GC_Index, LATCHES_ON ; Data from Latches = on - - ; Compute Info About Images, Setup ES:SI & ES:DI - - MOV AX, [BP].CB_Y2 ; Height of Bitmap in lines - SUB AX, [BP].CB_Y1 ; is Y2 - Y1 + 1 - INC AX ; (add 1 since were not 0 based) - MOV [BP].CB_Height, AX ; Save on Stack for later use - - MOV AX, [BP].CB_X2 ; Get # of "Bands" of 4 Pixels - MOV DX, [BP].CB_X1 ; the Bitmap Occupies as X2-X1 - SHR AX, 2 ; Get X2 Band (X2 / 4) - SHR DX, 2 ; Get X1 Band (X1 / 4) - SUB AX, DX ; AX = # of Bands - 1 - INC AX ; AX = # of Bands - MOV [BP].CB_Width, AX ; Save on Stack for later use - - SHL BX, 1 ; Scale Source Page to Word - MOV SI, PAGE_ADDR[BX] ; SI = Offset of Source Page - MOV AX, [BP].CB_Y1 ; Get Source Y1 Line - MUL SCREEN_WIDTH ; AX = Offset to Line Y1 - ADD SI, AX ; SI = Offset to Line Y1 - MOV AX, [BP].CB_X1 ; Get Source X1 - SHR AX, 2 ; X1 / 4 = Byte offset - ADD SI, AX ; SI = Byte Offset to (X1,Y1) - - MOV BX, CX ; Dest Page Index to BX - SHL BX, 1 ; Scale Source Page to Word - MOV DI, PAGE_ADDR[BX] ; DI = Offset of Dest Page - MOV AX, [BP].CB_DestY1 ; Get Dest Y1 Line - MUL SCREEN_WIDTH ; AX = Offset to Line Y1 - ADD DI, AX ; DI = Offset to Line Y1 - MOV AX, [BP].CB_DestX1 ; Get Dest X1 - SHR AX, 2 ; X1 / 4 = Byte offset - ADD DI, AX ; DI = Byte Offset to (D-X1,D-Y1) - - MOV CX, [BP].CB_Width ; CX = Width of Image (Bands) - DEC CX ; CX = 1? - JE @CB_Only_One_Band ; 0 Means Image Width of 1 Band - - MOV BX, [BP].CB_X1 ; Get Source X1 - AND BX, PLANE_BITS ; Aligned? (bits 0-1 = 00?) - JZ @CB_Check_Right ; if so, check right alignment - JNZ @CB_Left_Band ; not aligned? well.. - -@CB_Abort: - CLR AX ; Return False (Failure) - JMP @CB_Exit ; and Finish Up - - ; Copy when Left & Right Clip Masks overlap... - -@CB_Only_One_Band: - MOV BX, [BP].CB_X1 ; Get Left Clip Mask - AND BX, PLANE_BITS ; Mask out Row # - MOV AL, Left_Clip_Mask[BX] ; Get Left Edge Mask - MOV BX, [BP].CB_X2 ; Get Right Clip Mask - AND BX, PLANE_BITS ; Mask out Row # - AND AL, Right_Clip_Mask[BX] ; Get Right Edge Mask byte - - OUT_8 SC_Data, AL ; Clip For Left & Right Masks - - MOV CX, [BP].CB_Height ; CX = # of Lines to Copy - MOV DX, SCREEN_WIDTH ; DX = Width of Screen - CLR BX ; BX = Offset into Image - -@CB_One_Loop: - MOV AL, ES:[SI+BX] ; Load Latches - MOV ES:[DI+BX], AL ; Unload Latches - ADD BX, DX ; Advance Offset to Next Line - LOOPjz CX, @CB_One_Done ; Exit Loop if Finished - - MOV AL, ES:[SI+BX] ; Load Latches - MOV ES:[DI+BX], AL ; Unload Latches - ADD BX, DX ; Advance Offset to Next Line - LOOPx CX, @CB_One_Loop ; Loop until Finished - -@CB_One_Done: - JMP @CB_Finish ; Outa Here! - - ; Copy Left Edge of Bitmap - -@CB_Left_Band: - - OUT_8 SC_Data, Left_Clip_Mask[BX] ; Set Left Edge Plane Mask - - MOV CX, [BP].CB_Height ; CX = # of Lines to Copy - MOV DX, SCREEN_WIDTH ; DX = Width of Screen - CLR BX ; BX = Offset into Image - -@CB_Left_Loop: - MOV AL, ES:[SI+BX] ; Load Latches - MOV ES:[DI+BX], AL ; Unload Latches - ADD BX, DX ; Advance Offset to Next Line - LOOPjz CX, @CB_Left_Done ; Exit Loop if Finished - - MOV AL, ES:[SI+BX] ; Load Latches - MOV ES:[DI+BX], AL ; Unload Latches - ADD BX, DX ; Advance Offset to Next Line - LOOPx CX, @CB_Left_Loop ; Loop until Finished - -@CB_Left_Done: - INC DI ; Move Dest Over 1 band - INC SI ; Move Source Over 1 band - DEC [BP].CB_Width ; Band Width-- - - ; Determine if Right Edge of Bitmap needs special copy - -@CB_Check_Right: - MOV BX, [BP].CB_X2 ; Get Source X2 - AND BX, PLANE_BITS ; Aligned? (bits 0-1 = 11?) - CMP BL, 03h ; Plane = 3? - JE @CB_Copy_Middle ; Copy the Middle then! - - ; Copy Right Edge of Bitmap - -@CB_Right_Band: - - OUT_8 SC_Data, Right_Clip_Mask[BX] ; Set Right Edge Plane Mask - - DEC [BP].CB_Width ; Band Width-- - MOV CX, [BP].CB_Height ; CX = # of Lines to Copy - MOV DX, SCREEN_WIDTH ; DX = Width of Screen - MOV BX, [BP].CB_Width ; BX = Offset to Right Edge - -@CB_Right_Loop: - MOV AL, ES:[SI+BX] ; Load Latches - MOV ES:[DI+BX], AL ; Unload Latches - ADD BX, DX ; Advance Offset to Next Line - LOOPjz CX, @CB_Right_Done ; Exit Loop if Finished - - MOV AL, ES:[SI+BX] ; Load Latches - MOV ES:[DI+BX], AL ; Unload Latches - ADD BX, DX ; Advance Offset to Next Line - LOOPx CX, @CB_Right_Loop ; Loop until Finished - -@CB_Right_Done: - - ; Copy the Main Block of the Bitmap - -@CB_Copy_Middle: - - MOV CX, [BP].CB_Width ; Get Width Remaining - JCXZ @CB_Finish ; Exit if Done - - OUT_8 SC_Data, ALL_PLANES ; Copy all Planes - - MOV DX, SCREEN_WIDTH ; Get Width of Screen minus - SUB DX, CX ; Image width (for Adjustment) - MOV AX, [BP].CB_Height ; AX = # of Lines to Copy - MOV BX, CX ; BX = Quick REP reload count - MOV CX, ES ; Move VGA Segment - MOV DS, CX ; Into DS - - ; Actual Copy Loop. REP MOVSB does the work - -@CB_Middle_Copy: - MOV CX, BX ; Recharge Rep Count - REP MOVSB ; Move Bands - LOOPjz AX, @CB_Finish ; Exit Loop if Finished - - ADD SI, DX ; Adjust DS:SI to Next Line - ADD DI, DX ; Adjust ES:DI to Next Line - - MOV CX, BX ; Recharge Rep Count - REP MOVSB ; Move Bands - - ADD SI, DX ; Adjust DS:SI to Next Line - ADD DI, DX ; Adjust ES:DI to Next Line - LOOPx AX, @CB_Middle_Copy ; Copy Lines until Done - -@CB_Finish: - OUT_16 GC_Index, LATCHES_OFF ; Data from Latches = on - -@CB_Exit: - ADD SP, 04 ; Deallocate stack workspace - POPx DI, SI, DS, BP ; Restore Saved Registers - RET 16 ; Exit and Clean up Stack - -COPY_BITMAP ENDP - - END ; End of Code Segment diff --git a/16/modex105/MODEX.BI b/16/modex105/MODEX.BI deleted file mode 100755 index 6b1d7afe..00000000 --- a/16/modex105/MODEX.BI +++ /dev/null @@ -1,63 +0,0 @@ - - ' ===== SCREEN RESOLUTIONS ===== - -CONST Mode320x200 = 0, Mode320x400 = 1 -CONST Mode360x200 = 2, Mode360x400 = 3 -CONST Mode320x240 = 4, Mode320x480 = 5 -CONST Mode360x240 = 6, Mode360x480 = 7 - - ' ===== MODE X SETUP ROUTINES ===== - -DECLARE FUNCTION SET.VGA.MODEX% ALIAS "SET_VGA_MODEX" (BYVAL ModeType%, BYVAL MaxXpos%, BYVAL MaxYpos%, BYVAL Pages%) -DECLARE FUNCTION SET.MODEX% ALIAS "SET_MODEX" (BYVAL Mode%) - - ' ===== BASIC GRAPHICS PRIMITIVES ===== - -DECLARE SUB CLEAR.VGA.SCREEN ALIAS "CLEAR_VGA_SCREEN" (BYVAL ColorNum%) -DECLARE SUB SET.POINT ALIAS "SET_POINT" (BYVAL Xpos%, BYVAL Ypos%, BYVAL ColorNum%) -DECLARE FUNCTION READ.POINT% ALIAS "READ_POINT" (BYVAL Xpos%, BYVAL Ypos%) -DECLARE SUB FILL.BLOCK ALIAS "FILL_BLOCK" (BYVAL Xpos1%, BYVAL Ypos1%, BYVAL Xpos2%, BYVAL Ypos2%, BYVAL ColorNum%) -DECLARE SUB DRAW.LINE ALIAS "DRAW_LINE" (BYVAL Xpos1%, BYVAL Ypos1%, BYVAL Xpos2%, BYVAL Ypos2%, BYVAL ColorNum%) - - ' ===== DAC COLOR REGISTER ROUTINES ===== - -DECLARE SUB SET.DAC.REGISTER ALIAS "SET_DAC_REGISTER" (BYVAL RegNo%, BYVAL Red%, BYVAL Green%, BYVAL Blue%) -DECLARE SUB GET.DAC.REGISTER ALIAS "GET_DAC_REGISTER" (BYVAL RegNo%, Red%, Green%, Blue%) -DECLARE SUB LOAD.DAC.REGISTERS ALIAS "LOAD_DAC_REGISTERS" (SEG PalData AS ANY, BYVAL StartReg%, BYVAL EndReg%, BYVAL VSync%) -DECLARE SUB READ.DAC.REGISTERS ALIAS "READ_DAC_REGISTERS" (SEG PalData AS ANY, BYVAL StartReg%, BYVAL EndReg%) - - - ' ===== PAGE FLIPPING AND SCROLLING ROUTINES ===== - -DECLARE SUB SET.ACTIVE.PAGE ALIAS "SET_ACTIVE_PAGE" (BYVAL PageNo%) -DECLARE FUNCTION GET.ACTIVE.PAGE% ALIAS "GET_ACTIVE_PAGE" -DECLARE SUB SET.DISPLAY.PAGE ALIAS "SET_DISPLAY_PAGE" (BYVAL PageNo%) -DECLARE FUNCTION GET.DISPLAY.PAGE% ALIAS "GET_DISPLAY_PAGE" -DECLARE SUB SET.WINDOW ALIAS "SET_WINDOW" (BYVAL DisplayPage%, BYVAL XOffset%, BYVAL YOffset%) -DECLARE FUNCTION GET.X.OFFSET% ALIAS "GET_X_OFFSET" () -DECLARE FUNCTION GET.Y.OFFSET% ALIAS "GET_Y_OFFSET" () -DECLARE SUB SYNC.DISPLAY ALIAS "SYNC_DISPLAY" - - ' ===== TEXT DISPLAY ROUTINES ===== - -DECLARE SUB GPRINTC (BYVAL CharacterNum%, BYVAL Xpos%, BYVAL Ypos%, BYVAL ColorF%, BYVAL ColorB%) -DECLARE SUB TGPRINTC (BYVAL CharacterNum%, BYVAL Xpos%, BYVAL Ypos%, BYVAL ColorF%) -DECLARE SUB PRINT.STR ALIAS "PRINT_STR" (BYVAL StrSeg%, BYVAL StrOfs%, BYVAL MaxLen%, BYVAL Xpos%, BYVAL Ypos%, BYVAL ColorF%, BYVAL ColorB%) -DECLARE SUB TPRINT.STR ALIAS "TPRINT_STR" (BYVAL StrSeg%, BYVAL StrOfs%, BYVAL MaxLen%, BYVAL Xpos%, BYVAL Ypos%, BYVAL ColorF%) -DECLARE SUB SET.DISPLAY.FONT ALIAS "SET_DISPLAY_FONT" (SEG FontData AS ANY, BYVAL FontNumber%) - - ' ===== BITMAP (SPRITE) DISPLAY ROUTINES ===== - -DECLARE SUB DRAW.BITMAP ALIAS "DRAW_BITMAP" (SEG Image AS ANY, BYVAL Xpos%, BYVAL Ypos%, BYVAL xWidth%, BYVAL Height%) -DECLARE SUB TDRAW.BITMAP ALIAS "TDRAW_BITMAP" (SEG Image AS ANY, BYVAL Xpos%, BYVAL Ypos%, BYVAL xWidth%, BYVAL Height%) - - ' ==== VIDEO MEMORY to VIDEO MEMORY COPY ROUTINES ===== - -DECLARE SUB COPY.PAGE ALIAS "COPY_PAGE" (BYVAL SourcePage%, BYVAL DestPage%) -DECLARE SUB COPY.BITMAP ALIAS "COPY_BITMAP" (BYVAL SourcePage%, BYVAL X1%, BYVAL Y1%, BYVAL X2%, BYVAL Y2%, BYVAL DestPage%, BYVAL DestX1%, BYVAL DestY1%) - - - - - - diff --git a/16/modex105/MODEX.H b/16/modex105/MODEX.H deleted file mode 100755 index 7de25a63..00000000 --- a/16/modex105/MODEX.H +++ /dev/null @@ -1,76 +0,0 @@ - -#ifndef __MODEX_H -#define __MODEX_H - - /* ===== SCREEN RESOLUTIONS ===== */ - -#define Mode_320x200 0 -#define Mode_320x400 1 -#define Mode_360x200 2 -#define Mode_360x400 3 -#define Mode_320x240 4 -#define Mode_320x480 5 -#define Mode_360x240 6 -#define Mode_360x480 7 - - /* ===== MODE X SETUP ROUTINES ===== */ - -int far pascal set_vga_modex (int Mode, int MaxXpos, int MaxYpos, int Pages); -int far pascal set_modex (int Mode); - - /* ===== BASIC GRAPHICS PRIMITIVES ===== */ - -void far pascal clear_vga_screen (int Color); -void far pascal set_point (int Xpos, int Ypos, int Color); -int far pascal read_point (int Xpos, int Ypos); -void far pascal fill_block (int Xpos1, int Ypos1, int Xpos2, int Ypos2, - int Color); -void far pascal draw_line (int Xpos1, int Ypos1, int Xpos2, int Ypos2, - int Color); - - /* ===== DAC COLOR REGISTER ROUTINES ===== */ - -void far pascal set_dac_register (int RegNo, int Red, int Green, int Blue); -void far pascal get_dac_register (int RegNo, int* Red, int* Green, int* Blue); -void far pascal load_dac_registers (char far *PalData, int StartReg, - int EndReg, int VSync); -void far pascal readd_dac_registers (char far *PalData, int StartReg, - int EndReg); - - /* ===== PAGE FLIPPING AND SCROLLING ROUTINES ===== */ - -void far pascal set_active_page (int PageNo); -int far pascal get_active_page (void); -void far pascal set_display_page (int PageNo); -int far pascal get_display_page (void); -void far pascal set_window (int DisplayPage, int XOffset, int YOffset); -int far pascal get_x_offset (void); -int far pascal get_y_offset (void); -void far pascal sync_display (void); - - /* ===== TEXT DISPLAY ROUTINES ===== */ - -void far pascal gprintc (int CharNum, int Xpos, int Ypos, int ColorF, - int ColorB); -void far pascal tgprintc (int CharNum, int Xpos, int Ypos, int ColorF); -void far pascal print_str (char far *Text, int MaxLen, int Xpos, int Ypos, - int ColorF, int ColorB); -void far pascal tprint_str (char far *Text, int MaxLen, int Xpos, int Ypos, - int ColorF); -void far pascal set_display_font (char far *FontData, int FontNumber); - - /* ===== BITMAP (SPRITE) DISPLAY ROUTINES ===== */ - -void far pascal draw_bitmap (char far *Image, int Xpos, int Ypos, - int Width, int Height); -void far pascal tdraw_bitmap (char far *Image, int Xpos, int Ypos, - int Width, int Height); - - /* ==== VIDEO MEMORY to VIDEO MEMORY COPY ROUTINES ===== */ - -void far pascal copy_page (int SourcePage, int DestPage); -void far pascal copy_bitmap (int SourcePage, int X1, int Y1, int X2, int Y2, - int DestPage, int DestX1, int DestY1); - - -#endif diff --git a/16/modex105/MODEX.LST b/16/modex105/MODEX.LST deleted file mode 100755 index ce6d955c..00000000 --- a/16/modex105/MODEX.LST +++ /dev/null @@ -1,4122 +0,0 @@ -Microsoft (R) Macro Assembler Version 6.11 07/02/14 15:18:33 -modex.asm Page 1 - 1 - - - ;======================================================== - ; MODEX.ASM - A Complete Mode X Library - ; - ; Version 1.04 Release, 3 May 1993, By Matt Pritchard - ; With considerable input from Michael Abrash - ; - ; The following information is donated to the public domain in - ; the hopes that save other programmers much frustration. - ; - ; If you do use this code in a product, it would be nice if - ; you include a line like "Mode X routines by Matt Pritchard" - ; in the credits. - ; - ; ========================================================= - ; - ; All of this code is designed to be assembled with MASM 5.10a - ; but TASM 3.0 could be used as well. - ; - ; The routines contained are designed for use in a MEDIUM model - ; program. All Routines are FAR, and is assumed that a DGROUP - ; data segment exists and that DS will point to it on entry. - ; - ; For all routines, the AX, BX, CX, DX, ES and FLAGS registers - ; will not be preserved, while the DS, BP, SI and DI registers - ; will be preserved. - ; - ; Unless specifically noted, All Parameters are assumed to be - ; "PASSED BY VALUE". That is, the actual value is placed on - ; the stack. When a reference is passed it is assumed to be - ; a near pointer to a variable in the DGROUP segment. - ; - ; Routines that return a single 16-Bit integer value will - ; return that value in the AX register. - ; - ; This code will *NOT* run on an 8086/8088 because 80286+ - ; specific instructions are used. If you have an 8088/86 - ; and VGA, you can buy an 80386-40 motherboard for about - ; $160 and move into the 90's. - ; - ; This code is reasonably optimized: Most drawing loops have - ; been unrolled once and memory references are minimized by - ; keeping stuff in registers when possible. - ; - ; Error Trapping varies by Routine. No Clipping is performed - ; so the caller should verify that all coordinates are valid. - ; - ; Several Macros are used to simplify common 2 or 3 instruction - ; sequences. Several Single letter Text Constants also - ; simplify common assembler expressions like "WORD PTR". - ; - ; ------------------ Mode X Variations ------------------ - ; - ; Mode # Screen Size Max Pages Aspect Ratio (X:Y) - ; - ; 0 320 x 200 4 Pages 1.2:1 - ; 1 320 x 400 2 Pages 2.4:1 - ; 2 360 x 200 3 Pages 1.35:1 - ; 3 360 x 400 1 Page 2.7:1 - ; 4 320 x 240 3 Pages 1:1 - ; 5 320 x 480 1 Page 2:1 - ; 6 360 x 240 3 Pages 1.125:1 - ; 7 360 x 480 1 Page 2.25:1 - ; - ; -------------------- The Legal Stuff ------------------ - ; - ; No warranty, either written or implied, is made as to - ; the accuracy and usability of this code product. Use - ; at your own risk. Batteries not included. Pepperoni - ; and extra cheese available for an additional charge. - ; - ; ----------------------- The Author -------------------- - ; - ; Matt Pritchard is a paid programmer who'd rather be - ; writing games. He can be reached at: P.O. Box 140264, - ; Irving, TX 75014 USA. Michael Abrash is a living - ; god, who now works for Bill Gates (Microsoft). - ; - ; -------------------- Revision History ----------------- - ; 4-12-93: v1.02 - SET_POINT & READ_POINT now saves DI - ; SET_MODEX now saves SI - ; 5-3-93: v1.04 - added LOAD_DAC_REGISTERS and - ; READ_DAC_REGISTERS. Expanded CLR Macro - ; to handle multiple registers - ; - - PAGE 255, 132 - - .MODEL Medium - .286 - - ; ===== MACROS ===== - - ; Macro to OUT a 16 bit value to an I/O port - - OUT_16 MACRO Register, Value - IFDIFI , ; If DX not setup - MOV DX, Register ; then Select Register - ENDIF - IFDIFI , ; If AX not setup - MOV AX, Value ; then Get Data Value - ENDIF - OUT DX, AX ; Set I/O Register(s) - ENDM - - ; Macro to OUT a 8 bit value to an I/O Port - - OUT_8 MACRO Register, Value - IFDIFI , ; If DX not setup - MOV DX, Register ; then Select Register - ENDIF - IFDIFI , ; If AL not Setup - MOV AL, Value ; then Get Data Value - ENDIF - OUT DX, AL ; Set I/O Register - ENDM - - ; macros to PUSH and POP multiple registers - - PUSHx MACRO R1, R2, R3, R4, R5, R6, R7, R8 - IFNB - PUSH R1 ; Save R1 - PUSHx R2, R3, R4, R5, R6, R7, R8 - ENDIF - ENDM - - POPx MACRO R1, R2, R3, R4, R5, R6, R7, R8 - IFNB - POP R1 ; Restore R1 - POPx R2, R3, R4, R5, R6, R7, R8 - ENDIF - ENDM - - ; Macro to Clear Registers to 0 - - CLR MACRO Register, R2, R3, R4, R5, R6 - IFNB - XOR Register, Register ; Set Register = 0 - CLR R2, R3, R4, R5, R6 - ENDIF - ENDM - - ; Macros to Decrement Counter & Jump on Condition - - LOOPx MACRO Register, Destination - DEC Register ; Counter-- - JNZ Destination ; Jump if not 0 - ENDM - - LOOPjz MACRO Register, Destination - DEC Register ; Counter-- - JZ Destination ; Jump if 0 - ENDM - - - ; ===== General Constants ===== - - = 0000 False EQU 0 - =-0001 True EQU -1 - = 0000 nil EQU 0 - - = BYTE PTR b EQU BYTE PTR - = WORD PTR w EQU WORD PTR - = DWORD PTR d EQU DWORD PTR - = OFFSET o EQU OFFSET - = FAR PTR f EQU FAR PTR - = SHORT s EQU SHORT - = ?,?,?,? ?x4 EQU - = ?,?,? ?x3 EQU - - ; ===== VGA Register Values ===== - - = A000 VGA_Segment EQU 0A000h ; Vga Memory Segment - - = 03C0 ATTRIB_Ctrl EQU 03C0h ; VGA Attribute Controller - = 03CE GC_Index EQU 03CEh ; VGA Graphics Controller - = 03C4 SC_Index EQU 03C4h ; VGA Sequencer Controller - = 03C5 SC_Data EQU 03C5h ; VGA Sequencer Data Port - = 03D4 CRTC_Index EQU 03D4h ; VGA CRT Controller - = 03D5 CRTC_Data EQU 03D5h ; VGA CRT Controller Data - = 03C2 MISC_OUTPUT EQU 03C2h ; VGA Misc Register - = 03DA INPUT_1 EQU 03DAh ; Input Status #1 Register - - = 03C8 DAC_WRITE_ADDR EQU 03C8h ; VGA DAC Write Addr Register - = 03C7 DAC_READ_ADDR EQU 03C7h ; VGA DAC Read Addr Register - = 03C9 PEL_DATA_REG EQU 03C9h ; VGA DAC/PEL data Register R/W - - = 0033 PIXEL_PAN_REG EQU 033h ; Attrib Index: Pixel Pan Reg - = 0002 MAP_MASK EQU 002h ; Sequ Index: Write Map Mask reg - = 0004 READ_MAP EQU 004h ; GC Index: Read Map Register - = 000C START_DISP_HI EQU 00Ch ; CRTC Index: Display Start Hi - = 000D START_DISP_LO EQU 00Dh ; CRTC Index: Display Start Lo - - = 0102 MAP_MASK_PLANE1 EQU 00102h ; Map Register + Plane 1 - = 1102 MAP_MASK_PLANE2 EQU 01102h ; Map Register + Plane 1 - = 0F02 ALL_PLANES_ON EQU 00F02h ; Map Register + All Bit Planes - - = 0604 CHAIN4_OFF EQU 00604h ; Chain 4 mode Off - = 0100 ASYNC_RESET EQU 00100h ; (A)synchronous Reset - = 0300 SEQU_RESTART EQU 00300h ; Sequencer Restart - - = 0008 LATCHES_ON EQU 00008h ; Bit Mask + Data from Latches - = FF08 LATCHES_OFF EQU 0FF08h ; Bit Mask + Data from CPU - - = 0008 VERT_RETRACE EQU 08h ; INPUT_1: Vertical Retrace Bit - = 0003 PLANE_BITS EQU 03h ; Bits 0-1 of Xpos = Plane # - = 000F ALL_PLANES EQU 0Fh ; All Bit Planes Selected - = 000F CHAR_BITS EQU 0Fh ; Bits 0-3 of Character Data - - = 1130 GET_CHAR_PTR EQU 01130h ; VGA BIOS Func: Get Char Set - = 0003 ROM_8x8_Lo EQU 03h ; ROM 8x8 Char Set Lo Pointer - = 0004 ROM_8x8_Hi EQU 04h ; ROM 8x8 Char Set Hi Pointer - - ; Constants Specific for these routines - - = 0008 NUM_MODES EQU 8 ; # of Mode X Variations - - ; Specific Mode Data Table format... - - 000C Mode_Data_Table STRUC - 0000 00 M_MiscR DB ? ; Value of MISC_OUTPUT register - 0001 00 M_Pages DB ? ; Maximum Possible # of pages - 0002 0000 M_XSize DW ? ; X Size Displayed on screen - 0004 0000 M_YSize DW ? ; Y Size Displayed on screen - 0006 0000 M_XMax DW ? ; Maximum Possible X Size - 0008 0000 M_YMax DW ? ; Maximum Possible Y Size - 000A 0000 M_CRTC DW ? ; Table of CRTC register values - Mode_Data_Table ENDS - - ; ===== DGROUP STORAGE NEEDED (42 BYTES) ===== - - 0000 .DATA? - - 0000 0000 SCREEN_WIDTH DW 0 ; Width of a line in Bytes - 0002 0000 SCREEN_HEIGHT DW 0 ; Vertical Height in Pixels - - 0004 0000 LAST_PAGE DW 0 ; # of Display Pages - 0006 0004 [ PAGE_ADDR DW 4 DUP (0) ; Offsets to start of each page - 0000 - ] - - 000E 0000 PAGE_SIZE DW 0 ; Size of Page in Addr Bytes - - 0010 0000 DISPLAY_PAGE DW 0 ; Page # currently displayed - 0012 0000 ACTIVE_PAGE DW 0 ; Page # currently active - - 0014 0000 CURRENT_PAGE DW 0 ; Offset of current Page - 0016 0000 CURRENT_SEGMENT DW 0 ; Segment of VGA memory - - 0018 0000 CURRENT_XOFFSET DW 0 ; Current Display X Offset - 001A 0000 CURRENT_YOFFSET DW 0 ; Current Display Y Offset - - 001C 0000 CURRENT_MOFFSET DW 0 ; Current Start Offset - - 001E 0000 MAX_XOFFSET DW 0 ; Current Display X Offset - 0020 0000 MAX_YOFFSET DW 0 ; Current Display Y Offset - - 0022 0000 0000 CHARSET_LOW DW 0, 0 ; Far Ptr to Char Set: 0-127 - 0026 0000 0000 CHARSET_HI DW 0, 0 ; Far Ptr to Char Set: 128-255 - - 0000 .CODE - - ; ===== DATA TABLES ===== - - ; Data Tables, Put in Code Segment for Easy Access - ; (Like when all the other Segment Registers are in - ; use!!) and reduced DGROUP requirements... - - ; Bit Mask Tables for Left/Right/Character Masks - - 0000 0F 0E 0C 08 Left_Clip_Mask DB 0FH, 0EH, 0CH, 08H - - 0004 01 03 07 0F Right_Clip_Mask DB 01H, 03H, 07H, 0FH - - ; Bit Patterns for converting character fonts - - 0008 00 08 04 0C 02 0A Char_Plane_Data DB 00H,08H,04H,0CH,02H,0AH,06H,0EH - 06 0E - 0010 01 09 05 0D 03 0B DB 01H,09H,05H,0DH,03H,0BH,07H,0FH - 07 0F - - ; CRTC Register Values for Various Configurations - - 0018 MODE_Single_Line: ; CRTC Setup Data for 400/480 Line modes - 0018 4009 DW 04009H ; Cell Height (1 Scan Line) - 001A 0014 DW 00014H ; Dword Mode off - 001C E317 DW 0E317H ; turn on Byte Mode - 001E 0000 DW nil ; End of CRTC Data for 400/480 Line Mode - - 0020 MODE_Double_Line: ; CRTC Setup Data for 200/240 Line modes - 0020 4109 DW 04109H ; Cell Height (2 Scan Lines) - 0022 0014 DW 00014H ; Dword Mode off - 0024 E317 DW 0E317H ; turn on Byte Mode - 0026 0000 DW nil ; End of CRTC Data for 200/240 Line Mode - - 0028 MODE_320_Wide: ; CRTC Setup Data for 320 Horz Pixels - 0028 5F00 DW 05F00H ; Horz total - 002A 4F01 DW 04F01H ; Horz Displayed - 002C 5002 DW 05002H ; Start Horz Blanking - 002E 8203 DW 08203H ; End Horz Blanking - 0030 5404 DW 05404H ; Start H Sync - 0032 8005 DW 08005H ; End H Sync - 0034 0000 DW nil ; End of CRTC Data for 320 Horz pixels - - 0036 MODE_360_Wide: ; CRTC Setup Data for 360 Horz Pixels - 0036 6B00 DW 06B00H ; Horz total - 0038 5901 DW 05901H ; Horz Displayed - 003A 5A02 DW 05A02H ; Start Horz Blanking - 003C 8E03 DW 08E03H ; End Horz Blanking - 003E 5E04 DW 05E04H ; Start H Sync - 0040 8A05 DW 08A05H ; End H Sync - 0042 0000 DW nil ; End of CRTC Data for 360 Horz pixels - - 0044 MODE_200_Tall: - 0044 MODE_400_Tall: ; CRTC Setup Data for 200/400 Line modes - 0044 BF06 DW 0BF06H ; Vertical Total - 0046 1F07 DW 01F07H ; Overflow - 0048 9C10 DW 09C10H ; V Sync Start - 004A 8E11 DW 08E11H ; V Sync End/Prot Cr0 Cr7 - 004C 8F12 DW 08F12H ; Vertical Displayed - 004E 9615 DW 09615H ; V Blank Start - 0050 B916 DW 0B916H ; V Blank End - 0052 0000 DW nil ; End of CRTC Data for 200/400 Lines - - 0054 MODE_240_Tall: - 0054 MODE_480_Tall: ; CRTC Setup Data for 240/480 Line modes - 0054 0D06 DW 00D06H ; Vertical Total - 0056 3E07 DW 03E07H ; Overflow - 0058 EA10 DW 0EA10H ; V Sync Start - 005A 8C11 DW 08C11H ; V Sync End/Prot Cr0 Cr7 - 005C DF12 DW 0DF12H ; Vertical Displayed - 005E E715 DW 0E715H ; V Blank Start - 0060 0616 DW 00616H ; V Blank End - 0062 0000 DW nil ; End of CRTC Data for 240/480 Lines - - ; Table of Display Mode Tables - - 0064 MODE_TABLE: - 0064 0074 R 0086 R DW o MODE_320x200, o MODE_320x400 - 0068 00E0 R 00F2 R DW o MODE_360x200, o MODE_360x400 - 006C 00BC R 00CE R DW o MODE_320x240, o MODE_320x480 - Microsoft (R) Macro Assembler Version 6.11 07/02/14 15:18:33 -modex.asm Page 2 - 1 - - - 0070 0098 R 00AA R DW o MODE_360x240, o MODE_360x480 - - ; Table of Display Mode Components - - 0074 MODE_320x200: ; Data for 320 by 200 Pixels - - 0074 63 DB 063h ; 400 scan Lines & 25 Mhz Clock - 0075 04 DB 4 ; Maximum of 4 Pages - 0076 0140 00C8 DW 320, 200 ; Displayed Pixels (X,Y) - 007A 0516 0330 DW 1302, 816 ; Max Possible X and Y Sizes - - 007E 0028 R 0044 R DW o MODE_320_Wide, o MODE_200_Tall - 0082 0020 R 0000 DW o MODE_Double_Line, nil - - 0086 MODE_320x400: ; Data for 320 by 400 Pixels - - 0086 63 DB 063h ; 400 scan Lines & 25 Mhz Clock - 0087 02 DB 2 ; Maximum of 2 Pages - 0088 0140 0190 DW 320, 400 ; Displayed Pixels X,Y - 008C 0288 0330 DW 648, 816 ; Max Possible X and Y Sizes - - 0090 0028 R 0044 R DW o MODE_320_Wide, o MODE_400_Tall - 0094 0018 R 0000 DW o MODE_Single_Line, nil - - 0098 MODE_360x240: ; Data for 360 by 240 Pixels - - 0098 E7 DB 0E7h ; 480 scan Lines & 28 Mhz Clock - 0099 03 DB 3 ; Maximum of 3 Pages - 009A 0168 00F0 DW 360, 240 ; Displayed Pixels X,Y - 009E 0444 02D8 DW 1092, 728 ; Max Possible X and Y Sizes - - 00A2 0036 R 0054 R DW o MODE_360_Wide, o MODE_240_Tall - 00A6 0020 R 0000 DW o MODE_Double_Line , nil - - 00AA MODE_360x480: ; Data for 360 by 480 Pixels - - 00AA E7 DB 0E7h ; 480 scan Lines & 28 Mhz Clock - 00AB 01 DB 1 ; Only 1 Page Possible - 00AC 0168 01E0 DW 360, 480 ; Displayed Pixels X,Y - 00B0 0220 02D8 DW 544, 728 ; Max Possible X and Y Sizes - - 00B4 0036 R 0054 R DW o MODE_360_Wide, o MODE_480_Tall - 00B8 0018 R 0000 DW o MODE_Single_Line , nil - - 00BC MODE_320x240: ; Data for 320 by 240 Pixels - - 00BC E3 DB 0E3h ; 480 scan Lines & 25 Mhz Clock - 00BD 03 DB 3 ; Maximum of 3 Pages - 00BE 0140 00F0 DW 320, 240 ; Displayed Pixels X,Y - 00C2 0440 0332 DW 1088, 818 ; Max Possible X and Y Sizes - - 00C6 0028 R 0054 R DW o MODE_320_Wide, o MODE_240_Tall - 00CA 0020 R 0000 DW o MODE_Double_Line, nil - - 00CE MODE_320x480: ; Data for 320 by 480 Pixels - - 00CE E3 DB 0E3h ; 480 scan Lines & 25 Mhz Clock - 00CF 01 DB 1 ; Only 1 Page Possible - 00D0 0140 01E0 DW 320, 480 ; Displayed Pixels X,Y - 00D4 021C 0332 DW 540, 818 ; Max Possible X and Y Sizes - - 00D8 0028 R 0054 R DW o MODE_320_WIDE, o MODE_480_Tall - 00DC 0018 R 0000 DW o MODE_Single_Line, nil - - 00E0 MODE_360x200: ; Data for 360 by 200 Pixels - - 00E0 67 DB 067h ; 400 scan Lines & 28 Mhz Clock - 00E1 03 DB 3 ; Maximum of 3 Pages - 00E2 0168 00C8 DW 360, 200 ; Displayed Pixels (X,Y) - 00E6 0516 02D8 DW 1302, 728 ; Max Possible X and Y Sizes - - 00EA 0036 R 0044 R DW o MODE_360_Wide, MODE_200_Tall - 00EE 0020 R 0000 DW o MODE_Double_Line, nil - - 00F2 MODE_360x400: ; Data for 360 by 400 Pixels - - 00F2 67 DB 067h ; 400 scan Lines & 28 Mhz Clock - 00F3 01 DB 1 ; Maximum of 1 Pages - 00F4 0168 0190 DW 360, 400 ; Displayed Pixels X,Y - 00F8 0288 0330 DW 648, 816 ; Max Possible X and Y Sizes - - 00FC 0036 R 0044 R DW o MODE_360_Wide, MODE_400_Tall - 0100 0018 R 0000 DW o MODE_Single_Line, nil - - - ; ===== MODE X SETUP ROUTINES ===== - - ;====================================================== - ;SET_VGA_MODEX% (ModeType%, MaxXPos%, MaxYpos%, Pages%) - ;====================================================== - ; - ; Sets Up the specified version of Mode X. Allows for - ; the setup of multiple video pages, and a virtual - ; screen which can be larger than the displayed screen - ; (which can then be scrolled a pixel at a time) - ; - ; ENTRY: ModeType = Desired Screen Resolution (0-7) - ; - ; 0 = 320 x 200, 4 Pages max, 1.2:1 Aspect Ratio - ; 1 = 320 x 400, 2 Pages max, 2.4:1 Aspect Ratio - ; 2 = 360 x 200, 3 Pages max, 1.35:1 Aspect Ratio - ; 3 = 360 x 400, 1 Page max, 2.7:1 Aspect Ratio - ; 4 = 320 x 240, 3 Pages max, 1:1 Aspect Ratio - ; 5 = 320 x 480, 1 Page max, 2:1 Aspect Ratio - ; 6 = 360 x 240, 3 Pages max, 1.125:1 Aspect Ratio - ; 7 = 360 x 480, 1 Page max, 2.25:1 Aspect Ratio - ; - ; MaxXpos = The Desired Virtual Screen Width - ; MaxYpos = The Desired Virtual Screen Height - ; Pages = The Desired # of Video Pages - ; - ; EXIT: AX = Success Flag: 0 = Failure / -1= Success - ; - - 0016 SVM_STACK STRUC - 0000 0000 SVM_Table DW ? ; Offset of Mode Info Table - 0002 0000 0000 0000 DW ?x4 ; DI, SI, DS, BP - 0000 - 000A 00000000 DD ? ; Caller - 000E 0000 SVM_Pages DW ? ; # of Screen Pages desired - 0010 0000 SVM_Ysize DW ? ; Vertical Screen Size Desired - 0012 0000 SVM_Xsize DW ? ; Horizontal Screen Size Desired - 0014 0000 SVM_Mode DW ? ; Display Resolution Desired - SVM_STACK ENDS - - PUBLIC SET_VGA_MODEX - - 0104 SET_VGA_MODEX PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - 0104 55 1 PUSH BP ; Save R1 - 0105 1E 2 PUSH DS ; Save R1 - 0106 56 3 PUSH SI ; Save R1 - 0107 57 4 PUSH DI ; Save R1 - 0108 83 EC 02 SUB SP, 2 ; Allocate workspace - 010B 8B EC MOV BP, SP ; Set up Stack Frame - - ; Check Legality of Mode Request.... - - 010D 8B 5E 14 MOV BX, [BP].SVM_Mode ; Get Requested Mode # - 0110 83 FB 08 CMP BX, NUM_MODES ; Is it 0..7? - 0113 73 47 JAE @SVM_BadModeSetup ; If Not, Error out - - 0115 D1 E3 SHL BX, 1 ; Scale BX - 0117 2E: 8B B7 0064 R MOV SI, w MODE_TABLE[BX] ; CS:SI -> Mode Info - 011C 89 76 00 MOV [BP].SVM_Table, SI ; Save ptr for later use - - ; Check # of Requested Display Pages - - 011F 8B 4E 0E MOV CX, [BP].SVM_Pages ; Get # of Requested Pages - CLR CH ; Set Hi Word = 0! - 0122 32 ED 1 XOR CH, CH ; Set Register = 0 - 0124 2E: 3A 4C 01 CMP CL, CS:[SI].M_Pages ; Check # Pages for mode - 0128 77 32 JA @SVM_BadModeSetup ; Report Error if too Many Pages - 012A E3 30 JCXZ @SVM_BadModeSetup ; Report Error if 0 Pages - - ; Check Validity of X Size - - 012C 83 66 12 F8 AND [BP].SVM_XSize, 0FFF8h ; X size Mod 8 Must = 0 - - 0130 8B 46 12 MOV AX, [BP].SVM_XSize ; Get Logical Screen Width - 0133 2E: 3B 44 02 CMP AX, CS:[SI].M_XSize ; Check against Displayed X - 0137 72 23 JB @SVM_BadModeSetup ; Report Error if too small - 0139 2E: 3B 44 06 CMP AX, CS:[SI].M_XMax ; Check against Max X - 013D 77 1D JA @SVM_BadModeSetup ; Report Error if too big - - ; Check Validity of Y Size - - 013F 8B 5E 10 MOV BX, [BP].SVM_YSize ; Get Logical Screen Height - 0142 2E: 3B 5C 04 CMP BX, CS:[SI].M_YSize ; Check against Displayed Y - 0146 72 14 JB @SVM_BadModeSetup ; Report Error if too small - 0148 2E: 3B 5C 08 CMP BX, CS:[SI].M_YMax ; Check against Max Y - 014C 77 0E JA @SVM_BadModeSetup ; Report Error if too big - - ; Enough memory to Fit it all? - - 014E C1 E8 02 SHR AX, 2 ; # of Bytes:Line = XSize/4 - 0151 F7 E1 MUL CX ; AX = Bytes/Line * Pages - 0153 F7 E3 MUL BX ; DX:AX = Total VGA mem needed - 0155 71 0A JNO @SVM_Continue ; Exit if Total Size > 256K - - 0157 4A DEC DX ; Was it Exactly 256K??? - 0158 0B D0 OR DX, AX ; (DX = 1, AX = 0000) - 015A 74 05 JZ @SVM_Continue ; if so, it's valid... - - 015C @SVM_BadModeSetup: - - CLR AX ; Return Value = False - 015C 33 C0 1 XOR AX, AX ; Set Register = 0 - 015E E9 00E6 JMP @SVM_Exit ; Normal Exit - - 0161 @SVM_Continue: - - 0161 B8 0013 MOV AX, 13H ; Start with Mode 13H - 0164 CD 10 INT 10H ; Let BIOS Set Mode - - OUT_16 SC_INDEX, CHAIN4_OFF ; Disable Chain 4 Mode - 0166 BA 03C4 1 MOV DX, SC_INDEX ; then Select Register - 0169 B8 0604 1 MOV AX, CHAIN4_OFF ; then Get Data Value - 016C EF 1 OUT DX, AX ; Set I/O Register(s) - OUT_16 SC_INDEX, ASYNC_RESET ; (A)synchronous Reset - 016D BA 03C4 1 MOV DX, SC_INDEX ; then Select Register - 0170 B8 0100 1 MOV AX, ASYNC_RESET ; then Get Data Value - 0173 EF 1 OUT DX, AX ; Set I/O Register(s) - OUT_8 MISC_OUTPUT, CS:[SI].M_MiscR ; Set New Timing/Size - 0174 BA 03C2 1 MOV DX, MISC_OUTPUT ; then Select Register - 0177 2E: 8A 04 1 MOV AL, CS:[SI].M_MiscR ; then Get Data Value - 017A EE 1 OUT DX, AL ; Set I/O Register - OUT_16 SC_INDEX, SEQU_RESTART ; Restart Sequencer ... - 017B BA 03C4 1 MOV DX, SC_INDEX ; then Select Register - 017E B8 0300 1 MOV AX, SEQU_RESTART ; then Get Data Value - 0181 EF 1 OUT DX, AX ; Set I/O Register(s) - - OUT_8 CRTC_INDEX, 11H ; Select Vert Retrace End Register - 0182 BA 03D4 1 MOV DX, CRTC_INDEX ; then Select Register - 0185 B0 11 1 MOV AL, 11H ; then Get Data Value - 0187 EE 1 OUT DX, AL ; Set I/O Register - 0188 42 INC DX ; Point to Data - 0189 EC IN AL, DX ; Get Value, Bit 7 = Protect - 018A 24 7F AND AL, 7FH ; Mask out Write Protect - 018C EE OUT DX, AL ; And send it back - - 018D BA 03D4 MOV DX, CRTC_INDEX ; Vga Crtc Registers - 0190 83 C6 0A ADD SI, M_CRTC ; SI -> CRTC Parameter Data - - ; Load Tables of CRTC Parameters from List of Tables - - 0193 @SVM_Setup_Table: - - 0193 2E: 8B 3C MOV DI, CS:[SI] ; Get Pointer to CRTC Data Tbl - 0196 83 C6 02 ADD SI, 2 ; Point to next Ptr Entry - 0199 0B FF OR DI, DI ; A nil Ptr means that we have - 019B 74 0D JZ @SVM_Set_Data ; finished CRTC programming - - 019D @SVM_Setup_CRTC: - 019D 2E: 8B 05 MOV AX, CS:[DI] ; Get CRTC Data from Table - 01A0 83 C7 02 ADD DI, 2 ; Advance Pointer - 01A3 0B C0 OR AX, AX ; At End of Data Table? - 01A5 74 EC JZ @SVM_Setup_Table ; If so, Exit & get next Table - - 01A7 EF OUT DX, AX ; Reprogram VGA CRTC reg - 01A8 EB F3 JMP s @SVM_Setup_CRTC ; Process Next Table Entry - - ; Initialize Page & Scroll info, DI = 0 - - 01AA @SVM_Set_Data: - 01AA 89 3E 0010 R MOV DISPLAY_PAGE, DI ; Display Page = 0 - 01AE 89 3E 0012 R MOV ACTIVE_PAGE, DI ; Active Page = 0 - 01B2 89 3E 0014 R MOV CURRENT_PAGE, DI ; Current Page (Offset) = 0 - 01B6 89 3E 0018 R MOV CURRENT_XOFFSET, DI ; Horz Scroll Index = 0 - 01BA 89 3E 001A R MOV CURRENT_YOFFSET, DI ; Vert Scroll Index = 0 - Microsoft (R) Macro Assembler Version 6.11 07/02/14 15:18:33 -modex.asm Page 3 - 1 - - - 01BE 89 3E 001C R MOV CURRENT_MOFFSET, DI ; Memory Scroll Index = 0 - - 01C2 B8 A000 MOV AX, VGA_SEGMENT ; Segment for VGA memory - 01C5 A3 0016 R MOV CURRENT_SEGMENT, AX ; Save for Future LES's - - ; Set Logical Screen Width, X Scroll and Our Data - - 01C8 8B 76 00 MOV SI, [BP].SVM_Table ; Get Saved Ptr to Mode Info - 01CB 8B 46 12 MOV AX, [BP].SVM_Xsize ; Get Display Width - - 01CE 8B C8 MOV CX, AX ; CX = Logical Width - 01D0 2E: 2B 4C 02 SUB CX, CS:[SI].M_XSize ; CX = Max X Scroll Value - 01D4 89 0E 001E R MOV MAX_XOFFSET, CX ; Set Maximum X Scroll - - 01D8 C1 E8 02 SHR AX, 2 ; Bytes = Pixels / 4 - 01DB A3 0000 R MOV SCREEN_WIDTH, AX ; Save Width in Pixels - - 01DE D1 E8 SHR AX, 1 ; Offset Value = Bytes / 2 - 01E0 B4 13 MOV AH, 13h ; CRTC Offset Register Index - 01E2 86 C4 XCHG AL, AH ; Switch format for OUT - 01E4 EF OUT DX, AX ; Set VGA CRTC Offset Reg - - ; Setup Data table, Y Scroll, Misc for Other Routines - - 01E5 8B 46 10 MOV AX, [BP].SVM_Ysize ; Get Logical Screen Height - - 01E8 8B C8 MOV CX, AX ; CX = Logical Height - 01EA 2E: 2B 5C 04 SUB BX, CS:[SI].M_YSize ; CX = Max Y Scroll Value - 01EE 89 0E 0020 R MOV MAX_YOFFSET, CX ; Set Maximum Y Scroll - - 01F2 A3 0002 R MOV SCREEN_HEIGHT, AX ; Save Height in Pixels - 01F5 F7 26 0000 R MUL SCREEN_WIDTH ; AX = Page Size in Bytes, - 01F9 A3 000E R MOV PAGE_SIZE, AX ; Save Page Size - - 01FC 8B 4E 0E MOV CX, [BP].SVM_Pages ; Get # of Pages - 01FF 89 0E 0004 R MOV LAST_PAGE, CX ; Save # of Pages - - CLR BX ; Page # = 0 - 0203 33 DB 1 XOR BX, BX ; Set Register = 0 - 0205 8B D3 MOV DX, BX ; Page 0 Offset = 0 - - 0207 @SVM_Set_Pages: - - 0207 89 97 0006 R MOV PAGE_ADDR[BX], DX ; Set Page #(BX) Offset - 020B 83 C3 02 ADD BX, 2 ; Page#++ - 020E 03 D0 ADD DX, AX ; Compute Addr of Next Page - LOOPx CX, @SVM_Set_Pages ; Loop until all Pages Set - 0210 49 1 DEC CX ; Counter-- - 0211 75 F4 1 JNZ @SVM_Set_Pages ; Jump if not 0 - - ; Clear VGA Memory - - OUT_16 SC_INDEX, ALL_PLANES_ON ; Select All Planes - 0213 BA 03C4 1 MOV DX, SC_INDEX ; then Select Register - 0216 B8 0F02 1 MOV AX, ALL_PLANES_ON ; then Get Data Value - 0219 EF 1 OUT DX, AX ; Set I/O Register(s) - 021A C4 3E 0014 R LES DI, d CURRENT_PAGE ; -> Start of VGA memory - - CLR AX ; AX = 0 - 021E 33 C0 1 XOR AX, AX ; Set Register = 0 - 0220 FC CLD ; Block Xfer Forwards - 0221 B9 8000 MOV CX, 8000H ; 32K * 4 * 2 = 256K - 0224 F3/ AB REP STOSW ; Clear dat memory! - - ; Setup Font Pointers - - 0226 B7 03 MOV BH, ROM_8x8_Lo ; Ask for 8x8 Font, 0-127 - 0228 B8 1130 MOV AX, GET_CHAR_PTR ; Service to Get Pointer - 022B CD 10 INT 10h ; Call VGA BIOS - - 022D 89 2E 0022 R MOV CHARSET_LOW, BP ; Save Char Set Offset - 0231 8C 06 0024 R MOV CHARSET_LOW+2, ES ; Save Char Set Segment - - 0235 B7 04 MOV BH, ROM_8x8_Hi ; Ask for 8x8 Font, 128-255 - 0237 B8 1130 MOV AX, GET_CHAR_PTR ; Service to Get Pointer - 023A CD 10 INT 10h ; Call VGA BIOS - - 023C 89 2E 0026 R MOV CHARSET_HI, BP ; Save Char Set Offset - 0240 8C 06 0028 R MOV CHARSET_HI+2, ES ; Save Char Set Segment - - 0244 B8 FFFF MOV AX, True ; Return Success Code - - 0247 @SVM_EXIT: - 0247 83 C4 02 ADD SP, 2 ; Deallocate workspace - POPx DI, SI, DS, BP ; Restore Saved Registers - 024A 5F 1 POP DI ; Restore R1 - 024B 5E 2 POP SI ; Restore R1 - 024C 1F 3 POP DS ; Restore R1 - 024D 5D 4 POP BP ; Restore R1 - 024E CA 0008 RET 8 ; Exit & Clean Up Stack - - 0251 SET_VGA_MODEX ENDP - - - ;================== - ;SET_MODEX% (Mode%) - ;================== - ; - ; Quickie Mode Set - Sets Up Mode X to Default Configuration - ; - ; ENTRY: ModeType = Desired Screen Resolution (0-7) - ; (See SET_VGA_MODEX for list) - ; - ; EXIT: AX = Success Flag: 0 = Failure / -1= Success - ; - - 000A SM_STACK STRUC - 0000 0000 0000 DW ?,? ; BP, SI - 0004 00000000 DD ? ; Caller - 0008 0000 SM_Mode DW ? ; Desired Screen Resolution - SM_STACK ENDS - - PUBLIC SET_MODEX - - 0251 SET_MODEX PROC FAR - - PUSHx BP, SI ; Preserve Important registers - 0251 55 1 PUSH BP ; Save R1 - 0252 56 2 PUSH SI ; Save R1 - 0253 8B EC MOV BP, SP ; Set up Stack Frame - - CLR AX ; Assume Failure - 0255 33 C0 1 XOR AX, AX ; Set Register = 0 - 0257 8B 5E 08 MOV BX, [BP].SM_Mode ; Get Desired Mode # - 025A 83 FB 08 CMP BX, NUM_MODES ; Is it a Valid Mode #? - 025D 73 1C JAE @SMX_Exit ; If Not, don't Bother - - 025F 53 PUSH BX ; Push Mode Parameter - - 0260 D1 E3 SHL BX, 1 ; Scale BX to word Index - 0262 2E: 8B B7 0064 R MOV SI, w MODE_TABLE[BX] ; CS:SI -> Mode Info - - 0267 2E: FF 74 02 PUSH CS:[SI].M_XSize ; Push Default X Size - 026B 2E: FF 74 04 PUSH CS:[SI].M_Ysize ; Push Default Y size - 026F 2E: 8A 44 01 MOV AL, CS:[SI].M_Pages ; Get Default # of Pages - CLR AH ; Hi Byte = 0 - 0273 32 E4 1 XOR AH, AH ; Set Register = 0 - 0275 50 PUSH AX ; Push # Pages - - 0276 9A ---- 0104 R CALL f SET_VGA_MODEX ; Set up Mode X! - - 027B @SMX_Exit: - POPx SI, BP ; Restore Registers - 027B 5E 1 POP SI ; Restore R1 - 027C 5D 2 POP BP ; Restore R1 - 027D CA 0002 RET 2 ; Exit & Clean Up Stack - - 0280 SET_MODEX ENDP - - - ; ===== BASIC GRAPHICS PRIMITIVES ===== - - ;============================ - ;CLEAR_VGA_SCREEN (ColorNum%) - ;============================ - ; - ; Clears the active display page - ; - ; ENTRY: ColorNum = Color Value to fill the page with - ; - ; EXIT: No meaningful values returned - ; - - 000A CVS_STACK STRUC - 0000 0000 0000 DW ?,? ; DI, BP - 0004 00000000 DD ? ; Caller - 0008 00 00 CVS_COLOR DB ?,? ; Color to Set Screen to - CVS_STACK ENDS - - PUBLIC CLEAR_VGA_SCREEN - - 0280 CLEAR_VGA_SCREEN PROC FAR - - PUSHx BP, DI ; Preserve Important Registers - 0280 55 1 PUSH BP ; Save R1 - 0281 57 2 PUSH DI ; Save R1 - 0282 8B EC MOV BP, SP ; Set up Stack Frame - - OUT_16 SC_INDEX, ALL_PLANES_ON ; Select All Planes - 0284 BA 03C4 1 MOV DX, SC_INDEX ; then Select Register - 0287 B8 0F02 1 MOV AX, ALL_PLANES_ON ; then Get Data Value - 028A EF 1 OUT DX, AX ; Set I/O Register(s) - 028B C4 3E 0014 R LES DI, d CURRENT_PAGE ; Point to Active VGA Page - - 028F 8A 46 08 MOV AL, [BP].CVS_COLOR ; Get Color - 0292 8A E0 MOV AH, AL ; Copy for Word Write - 0294 FC CLD ; Block fill Forwards - - 0295 8B 0E 000E R MOV CX, PAGE_SIZE ; Get Size of Page - 0299 D1 E9 SHR CX, 1 ; Divide by 2 for Words - 029B F3/ AB REP STOSW ; Block Fill VGA memory - - POPx DI, BP ; Restore Saved Registers - 029D 5F 1 POP DI ; Restore R1 - 029E 5D 2 POP BP ; Restore R1 - 029F CA 0002 RET 2 ; Exit & Clean Up Stack - - 02A2 CLEAR_VGA_SCREEN ENDP - - - ;=================================== - ;SET_POINT (Xpos%, Ypos%, ColorNum%) - ;=================================== - ; - ; Plots a single Pixel on the active display page - ; - ; ENTRY: Xpos = X position to plot pixel at - ; Ypos = Y position to plot pixel at - ; ColorNum = Color to plot pixel with - ; - ; EXIT: No meaningful values returned - ; - - 000E SP_STACK STRUC - 0000 0000 0000 DW ?,? ; BP, DI - 0004 00000000 DD ? ; Caller - 0008 00 00 SETP_Color DB ?,? ; Color of Point to Plot - 000A 0000 SETP_Ypos DW ? ; Y pos of Point to Plot - 000C 0000 SETP_Xpos DW ? ; X pos of Point to Plot - SP_STACK ENDS - - PUBLIC SET_POINT - - 02A2 SET_POINT PROC FAR - - PUSHx BP, DI ; Preserve Registers - 02A2 55 1 PUSH BP ; Save R1 - 02A3 57 2 PUSH DI ; Save R1 - 02A4 8B EC MOV BP, SP ; Set up Stack Frame - - 02A6 C4 3E 0014 R LES DI, d CURRENT_PAGE ; Point to Active VGA Page - - 02AA 8B 46 0A MOV AX, [BP].SETP_Ypos ; Get Line # of Pixel - 02AD F7 26 0000 R MUL SCREEN_WIDTH ; Get Offset to Start of Line - - 02B1 8B 5E 0C MOV BX, [BP].SETP_Xpos ; Get Xpos - 02B4 8B CB MOV CX, BX ; Copy to extract Plane # from - 02B6 C1 EB 02 SHR BX, 2 ; X offset (Bytes) = Xpos/4 - 02B9 03 D8 ADD BX, AX ; Offset = Width*Ypos + Xpos/4 - - 02BB B8 0102 MOV AX, MAP_MASK_PLANE1 ; Map Mask & Plane Select Register - 02BE 80 E1 03 AND CL, PLANE_BITS ; Get Plane Bits - 02C1 D2 E4 SHL AH, CL ; Get Plane Select Value - OUT_16 SC_Index, AX ; Select Plane - 02C3 BA 03C4 1 MOV DX, SC_Index ; then Select Register - 02C6 EF 1 OUT DX, AX ; Set I/O Register(s) - - 02C7 8A 46 08 MOV AL,[BP].SETP_Color ; Get Pixel Color - 02CA 26: 88 01 MOV ES:[DI+BX], AL ; Draw Pixel - - POPx DI, BP ; Restore Saved Registers - Microsoft (R) Macro Assembler Version 6.11 07/02/14 15:18:33 -modex.asm Page 4 - 1 - - - 02CD 5F 1 POP DI ; Restore R1 - 02CE 5D 2 POP BP ; Restore R1 - 02CF CA 0006 RET 6 ; Exit and Clean up Stack - - 02D2 SET_POINT ENDP - - - ;========================== - ;READ_POINT% (Xpos%, Ypos%) - ;========================== - ; - ; Read the color of a pixel from the Active Display Page - ; - ; ENTRY: Xpos = X position of pixel to read - ; Ypos = Y position of pixel to read - ; - ; EXIT: AX = Color of Pixel at (Xpos, Ypos) - ; - - 000C RP_STACK STRUC - 0000 0000 0000 DW ?,? ; BP, DI - 0004 00000000 DD ? ; Caller - 0008 0000 RP_Ypos DW ? ; Y pos of Point to Read - 000A 0000 RP_Xpos DW ? ; X pos of Point to Read - RP_STACK ENDS - - PUBLIC READ_POINT - - 02D2 READ_POINT PROC FAR - - PUSHx BP, DI ; Preserve Registers - 02D2 55 1 PUSH BP ; Save R1 - 02D3 57 2 PUSH DI ; Save R1 - 02D4 8B EC MOV BP, SP ; Set up Stack Frame - - 02D6 C4 3E 0014 R LES DI, d CURRENT_PAGE ; Point to Active VGA Page - - 02DA 8B 46 08 MOV AX, [BP].RP_Ypos ; Get Line # of Pixel - 02DD F7 26 0000 R MUL SCREEN_WIDTH ; Get Offset to Start of Line - - 02E1 8B 5E 0A MOV BX, [BP].RP_Xpos ; Get Xpos - 02E4 8B CB MOV CX, BX - 02E6 C1 EB 02 SHR BX, 2 ; X offset (Bytes) = Xpos/4 - 02E9 03 D8 ADD BX, AX ; Offset = Width*Ypos + Xpos/4 - - 02EB B0 04 MOV AL, READ_MAP ; GC Read Mask Register - 02ED 8A E1 MOV AH, CL ; Get Xpos - 02EF 80 E4 03 AND AH, PLANE_BITS ; & mask out Plane # - OUT_16 GC_INDEX, AX ; Select Plane to read in - 02F2 BA 03CE 1 MOV DX, GC_INDEX ; then Select Register - 02F5 EF 1 OUT DX, AX ; Set I/O Register(s) - - CLR AH ; Clear Return Value Hi byte - 02F6 32 E4 1 XOR AH, AH ; Set Register = 0 - 02F8 26: 8A 01 MOV AL, ES:[DI+BX] ; Get Color of Pixel - - POPx DI, BP ; Restore Saved Registers - 02FB 5F 1 POP DI ; Restore R1 - 02FC 5D 2 POP BP ; Restore R1 - 02FD CA 0004 RET 4 ; Exit and Clean up Stack - - 0300 READ_POINT ENDP - - - ;====================================================== - ;FILL_BLOCK (Xpos1%, Ypos1%, Xpos2%, Ypos2%, ColorNum%) - ;====================================================== - ; - ; Fills a rectangular block on the active display Page - ; - ; ENTRY: Xpos1 = Left X position of area to fill - ; Ypos1 = Top Y position of area to fill - ; Xpos2 = Right X position of area to fill - ; Ypos2 = Bottom Y position of area to fill - ; ColorNum = Color to fill area with - ; - ; EXIT: No meaningful values returned - ; - - 0016 FB_STACK STRUC - 0000 0000 0000 0000 DW ?x4 ; DS, DI, SI, BP - 0000 - 0008 00000000 DD ? ; Caller - 000C 00 00 FB_Color DB ?,? ; Fill Color - 000E 0000 FB_Ypos2 DW ? ; Y pos of Lower Right Pixel - 0010 0000 FB_Xpos2 DW ? ; X pos of Lower Right Pixel - 0012 0000 FB_Ypos1 DW ? ; Y pos of Upper Left Pixel - 0014 0000 FB_Xpos1 DW ? ; X pos of Upper Left Pixel - FB_STACK ENDS - - PUBLIC FILL_BLOCK - - 0300 FILL_BLOCK PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - 0300 55 1 PUSH BP ; Save R1 - 0301 1E 2 PUSH DS ; Save R1 - 0302 56 3 PUSH SI ; Save R1 - 0303 57 4 PUSH DI ; Save R1 - 0304 8B EC MOV BP, SP ; Set up Stack Frame - - 0306 C4 3E 0014 R LES DI, d CURRENT_PAGE ; Point to Active VGA Page - 030A FC CLD ; Direction Flag = Forward - - OUT_8 SC_INDEX, MAP_MASK ; Set up for Plane Select - 030B BA 03C4 1 MOV DX, SC_INDEX ; then Select Register - 030E B0 02 1 MOV AL, MAP_MASK ; then Get Data Value - 0310 EE 1 OUT DX, AL ; Set I/O Register - - ; Validate Pixel Coordinates - ; If necessary, Swap so X1 <= X2, Y1 <= Y2 - - 0311 8B 46 12 MOV AX, [BP].FB_Ypos1 ; AX = Y1 is Y1< Y2? - 0314 8B 5E 0E MOV BX, [BP].FB_Ypos2 ; BX = Y2 - 0317 3B C3 CMP AX, BX - 0319 7E 04 JLE @FB_NOSWAP1 - - 031B 89 5E 12 MOV [BP].FB_Ypos1, BX ; Swap Y1 and Y2 and save Y1 - 031E 93 XCHG AX, BX ; on stack for future use - - 031F @FB_NOSWAP1: - 031F 2B D8 SUB BX, AX ; Get Y width - 0321 43 INC BX ; Add 1 to avoid 0 value - 0322 89 5E 0E MOV [BP].FB_Ypos2, BX ; Save in Ypos2 - - 0325 F7 26 0000 R MUL SCREEN_WIDTH ; Mul Y1 by Bytes per Line - 0329 03 F8 ADD DI, AX ; DI = Start of Line Y1 - - 032B 8B 46 14 MOV AX, [BP].FB_Xpos1 ; Check X1 <= X2 - 032E 8B 5E 10 MOV BX, [BP].FB_Xpos2 ; - 0331 3B C3 CMP AX, BX - 0333 7E 04 JLE @FB_NOSWAP2 ; Skip Ahead if Ok - - 0335 89 46 10 MOV [BP].FB_Xpos2, AX ; Swap X1 AND X2 and save X2 - 0338 93 XCHG AX, BX ; on stack for future use - - ; All our Input Values are in order, Now determine - ; How many full "bands" 4 pixels wide (aligned) there - ; are, and if there are partial bands (<4 pixels) on - ; the left and right edges. - - 0339 @FB_NOSWAP2: - 0339 8B D0 MOV DX, AX ; DX = X1 (Pixel Position) - 033B C1 EA 02 SHR DX, 2 ; DX/4 = Bytes into Line - 033E 03 FA ADD DI, DX ; DI = Addr of Upper-Left Corner - - 0340 8B CB MOV CX, BX ; CX = X2 (Pixel Position) - 0342 C1 E9 02 SHR CX, 2 ; CX/4 = Bytes into Line - - 0345 3B D1 CMP DX, CX ; Start and end in same band? - 0347 75 03 JNE @FB_NORMAL ; if not, check for l & r edges - 0349 E9 0086 JMP @FB_ONE_BAND_ONLY ; if so, then special processing - - 034C @FB_NORMAL: - 034C 2B CA SUB CX, DX ; CX = # bands -1 - 034E 8B F0 MOV SI, AX ; SI = PLANE#(X1) - 0350 83 E6 03 AND SI, PLANE_BITS ; if Left edge is aligned then - 0353 74 27 JZ @FB_L_PLANE_FLUSH ; no special processing.. - - ; Draw "Left Edge" vertical strip of 1-3 pixels... - - OUT_8 SC_Data, Left_Clip_Mask[SI] ; Set Left Edge Plane Mask - 0355 BA 03C5 1 MOV DX, SC_Data ; then Select Register - 0358 2E: 8A 84 0000 R 1 MOV AL, Left_Clip_Mask[SI] ; then Get Data Value - 035D EE 1 OUT DX, AL ; Set I/O Register - - 035E 8B F7 MOV SI, DI ; SI = Copy of Start Addr (UL) - - 0360 8B 56 0E MOV DX, [BP].FB_Ypos2 ; Get # of Lines to draw - 0363 8A 46 0C MOV AL, [BP].FB_Color ; Get Fill Color - 0366 8B 1E 0000 R MOV BX, SCREEN_WIDTH ; Get Vertical increment Value - - 036A @FB_LEFT_LOOP: - 036A 26: 88 04 MOV ES:[SI], AL ; Fill in Left Edge Pixels - 036D 03 F3 ADD SI, BX ; Point to Next Line (Below) - LOOPjz DX, @FB_LEFT_CONT ; Exit loop if all Lines Drawn - 036F 4A 1 DEC DX ; Counter-- - 0370 74 08 1 JZ @FB_LEFT_CONT ; Jump if 0 - - 0372 26: 88 04 MOV ES:[SI], AL ; Fill in Left Edge Pixels - 0375 03 F3 ADD SI, BX ; Point to Next Line (Below) - LOOPx DX, @FB_LEFT_LOOP ; loop until left strip is drawn - 0377 4A 1 DEC DX ; Counter-- - 0378 75 F0 1 JNZ @FB_LEFT_LOOP ; Jump if not 0 - - 037A @FB_LEFT_CONT: - - 037A 47 INC DI ; Point to Middle (or Right) Block - 037B 49 DEC CX ; Reset CX instead of JMP @FB_RIGHT - - 037C @FB_L_PLANE_FLUSH: - 037C 41 INC CX ; Add in Left band to middle block - - ; DI = Addr of 1st middle Pixel (band) to fill - ; CX = # of Bands to fill -1 - - 037D @FB_RIGHT: - 037D 8B 76 10 MOV SI, [BP].FB_Xpos2 ; Get Xpos2 - 0380 83 E6 03 AND SI, PLANE_BITS ; Get Plane values - 0383 83 FE 03 CMP SI, 0003 ; Plane = 3? - 0386 74 2B JE @FB_R_EDGE_FLUSH ; Hey, add to middle - - ; Draw "Right Edge" vertical strip of 1-3 pixels... - - OUT_8 SC_Data, Right_Clip_Mask[SI] ; Right Edge Plane Mask - 0388 BA 03C5 1 MOV DX, SC_Data ; then Select Register - 038B 2E: 8A 84 0004 R 1 MOV AL, Right_Clip_Mask[SI] ; then Get Data Value - 0390 EE 1 OUT DX, AL ; Set I/O Register - - 0391 8B F7 MOV SI, DI ; Get Addr of Left Edge - 0393 03 F1 ADD SI, CX ; Add Width-1 (Bands) - 0395 4E DEC SI ; To point to top of Right Edge - - 0396 8B 56 0E MOV DX, [BP].FB_Ypos2 ; Get # of Lines to draw - 0399 8A 46 0C MOV AL, [BP].FB_Color ; Get Fill Color - 039C 8B 1E 0000 R MOV BX, SCREEN_WIDTH ; Get Vertical increment Value - - 03A0 @FB_RIGHT_LOOP: - 03A0 26: 88 04 MOV ES:[SI], AL ; Fill in Right Edge Pixels - 03A3 03 F3 ADD SI, BX ; Point to Next Line (Below) - LOOPjz DX, @FB_RIGHT_CONT ; Exit loop if all Lines Drawn - 03A5 4A 1 DEC DX ; Counter-- - 03A6 74 08 1 JZ @FB_RIGHT_CONT ; Jump if 0 - - 03A8 26: 88 04 MOV ES:[SI], AL ; Fill in Right Edge Pixels - 03AB 03 F3 ADD SI, BX ; Point to Next Line (Below) - LOOPx DX, @FB_RIGHT_LOOP ; loop until left strip is drawn - 03AD 4A 1 DEC DX ; Counter-- - 03AE 75 F0 1 JNZ @FB_RIGHT_LOOP ; Jump if not 0 - - 03B0 @FB_RIGHT_CONT: - - 03B0 49 DEC CX ; Minus 1 for Middle bands - 03B1 74 51 JZ @FB_EXIT ; Uh.. no Middle bands... - - 03B3 @FB_R_EDGE_FLUSH: - - ; DI = Addr of Upper Left block to fill - ; CX = # of Bands to fill in (width) - - OUT_8 SC_Data, ALL_PLANES ; Write to All Planes - 03B3 BA 03C5 1 MOV DX, SC_Data ; then Select Register - 03B6 B0 0F 1 MOV AL, ALL_PLANES ; then Get Data Value - 03B8 EE 1 OUT DX, AL ; Set I/O Register - - 03B9 8B 16 0000 R MOV DX, SCREEN_WIDTH ; DX = DI Increment - 03BD 2B D1 SUB DX, CX ; = Screen_Width-# Planes Filled - - 03BF 8B D9 MOV BX, CX ; BX = Quick Refill for CX - 03C1 8B 76 0E MOV SI, [BP].FB_Ypos2 ; SI = # of Line to Fill - 03C4 8A 46 0C MOV AL, [BP].FB_Color ; Get Fill Color - Microsoft (R) Macro Assembler Version 6.11 07/02/14 15:18:33 -modex.asm Page 5 - 1 - - - - 03C7 @FB_MIDDLE_LOOP: - 03C7 F3/ AA REP STOSB ; Fill in entire line - - 03C9 8B CB MOV CX, BX ; Recharge CX (Line Width) - 03CB 03 FA ADD DI, DX ; Point to start of Next Line - LOOPx SI, @FB_MIDDLE_LOOP ; Loop until all lines drawn - 03CD 4E 1 DEC SI ; Counter-- - 03CE 75 F7 1 JNZ @FB_MIDDLE_LOOP ; Jump if not 0 - - 03D0 EB 32 JMP s @FB_EXIT ; Outa here - - 03D2 @FB_ONE_BAND_ONLY: - 03D2 8B F0 MOV SI, AX ; Get Left Clip Mask, Save X1 - 03D4 83 E6 03 AND SI, PLANE_BITS ; Mask out Row # - 03D7 2E: 8A 84 0000 R MOV AL, Left_Clip_Mask[SI] ; Get Left Edge Mask - 03DC 8B F3 MOV SI, BX ; Get Right Clip Mask, Save X2 - 03DE 83 E6 03 AND SI, PLANE_BITS ; Mask out Row # - 03E1 2E: 22 84 0004 R AND AL, Right_Clip_Mask[SI] ; Get Right Edge Mask byte - - OUT_8 SC_Data, AL ; Clip For Left & Right Masks - 03E6 BA 03C5 1 MOV DX, SC_Data ; then Select Register - 03E9 EE 1 OUT DX, AL ; Set I/O Register - - 03EA 8B 4E 0E MOV CX, [BP].FB_Ypos2 ; Get # of Lines to draw - 03ED 8A 46 0C MOV AL, [BP].FB_Color ; Get Fill Color - 03F0 8B 1E 0000 R MOV BX, SCREEN_WIDTH ; Get Vertical increment Value - - 03F4 @FB_ONE_LOOP: - 03F4 26: 88 05 MOV ES:[DI], AL ; Fill in Pixels - 03F7 03 FB ADD DI, BX ; Point to Next Line (Below) - LOOPjz CX, @FB_EXIT ; Exit loop if all Lines Drawn - 03F9 49 1 DEC CX ; Counter-- - 03FA 74 08 1 JZ @FB_EXIT ; Jump if 0 - - 03FC 26: 88 05 MOV ES:[DI], AL ; Fill in Pixels - 03FF 03 FB ADD DI, BX ; Point to Next Line (Below) - LOOPx CX, @FB_ONE_LOOP ; loop until left strip is drawn - 0401 49 1 DEC CX ; Counter-- - 0402 75 F0 1 JNZ @FB_ONE_LOOP ; Jump if not 0 - - 0404 @FB_EXIT: - POPx DI, SI, DS, BP ; Restore Saved Registers - 0404 5F 1 POP DI ; Restore R1 - 0405 5E 2 POP SI ; Restore R1 - 0406 1F 3 POP DS ; Restore R1 - 0407 5D 4 POP BP ; Restore R1 - 0408 CA 000A RET 10 ; Exit and Clean up Stack - - 040B FILL_BLOCK ENDP - - - ;===================================================== - ;DRAW_LINE (Xpos1%, Ypos1%, Xpos2%, Ypos2%, ColorNum%) - ;===================================================== - ; - ; Draws a Line on the active display page - ; - ; ENTRY: Xpos1 = X position of first point on line - ; Ypos1 = Y position of first point on line - ; Xpos2 = X position of last point on line - ; Ypos2 = Y position of last point on line - ; ColorNum = Color to draw line with - ; - ; EXIT: No meaningful values returned - ; - - 0014 DL_STACK STRUC - 0000 0000 0000 0000 DW ?x3 ; DI, SI, BP - 0006 00000000 DD ? ; Caller - 000A 00 00 DL_ColorF DB ?,? ; Line Draw Color - 000C 0000 DL_Ypos2 DW ? ; Y pos of last point - 000E 0000 DL_Xpos2 DW ? ; X pos of last point - 0010 0000 DL_Ypos1 DW ? ; Y pos of first point - 0012 0000 DL_Xpos1 DW ? ; X pos of first point - DL_STACK ENDS - - PUBLIC DRAW_LINE - - 040B DRAW_LINE PROC FAR - - PUSHx BP, SI, DI ; Preserve Important Registers - 040B 55 1 PUSH BP ; Save R1 - 040C 56 2 PUSH SI ; Save R1 - 040D 57 3 PUSH DI ; Save R1 - 040E 8B EC MOV BP, SP ; Set up Stack Frame - 0410 FC CLD ; Direction Flag = Forward - - OUT_8 SC_INDEX, MAP_MASK ; Set up for Plane Select - 0411 BA 03C4 1 MOV DX, SC_INDEX ; then Select Register - 0414 B0 02 1 MOV AL, MAP_MASK ; then Get Data Value - 0416 EE 1 OUT DX, AL ; Set I/O Register - 0417 8A 6E 0A MOV CH, [BP].DL_ColorF ; Save Line Color in CH - - ; Check Line Type - - 041A 8B 76 12 MOV SI, [BP].DL_Xpos1 ; AX = X1 is X1< X2? - 041D 8B 7E 0E MOV DI, [BP].DL_Xpos2 ; DX = X2 - 0420 3B F7 CMP SI, DI ; Is X1 < X2 - 0422 74 5D JE @DL_VLINE ; If X1=X2, Draw Vertical Line - 0424 7C 02 JL @DL_NOSWAP1 ; If X1 < X2, don't swap - - 0426 87 F7 XCHG SI, DI ; X2 IS > X1, SO SWAP THEM - - 0428 @DL_NOSWAP1: - - ; SI = X1, DI = X2 - - 0428 8B 46 10 MOV AX, [BP].DL_Ypos1 ; AX = Y1 is Y1 <> Y2? - 042B 3B 46 0C CMP AX, [BP].DL_Ypos2 ; Y1 = Y2? - 042E 74 03 JE @DL_HORZ ; If so, Draw a Horizontal Line - - 0430 E9 0094 JMP @DL_BREZHAM ; Diagonal line... go do it... - - ; This Code draws a Horizontal Line in Mode X where: - ; SI = X1, DI = X2, and AX = Y1/Y2 - - 0433 @DL_HORZ: - - 0433 F7 26 0000 R MUL SCREEN_WIDTH ; Offset = Ypos * Screen_Width - 0437 8B D0 MOV DX, AX ; CX = Line offset into Page - - 0439 8B C6 MOV AX, SI ; Get Left edge, Save X1 - 043B 83 E6 03 AND SI, PLANE_BITS ; Mask out Row # - 043E 2E: 8A 9C 0000 R MOV BL, Left_Clip_Mask[SI] ; Get Left Edge Mask - 0443 8B CF MOV CX, DI ; Get Right edge, Save X2 - 0445 83 E7 03 AND DI, PLANE_BITS ; Mask out Row # - 0448 2E: 8A BD 0004 R MOV BH, Right_Clip_Mask[DI] ; Get Right Edge Mask byte - - 044D C1 E8 02 SHR AX, 2 ; Get X1 Byte # (=X1/4) - 0450 C1 E9 02 SHR CX, 2 ; Get X2 Byte # (=X2/4) - - 0453 C4 3E 0014 R LES DI, d CURRENT_PAGE ; Point to Active VGA Page - 0457 03 FA ADD DI, DX ; Point to Start of Line - 0459 03 F8 ADD DI, AX ; Point to Pixel X1 - - 045B 2B C8 SUB CX, AX ; CX = # Of Bands (-1) to set - 045D 75 02 JNZ @DL_LONGLN ; jump if longer than one segment - - 045F 22 DF AND BL, BH ; otherwise, merge clip masks - - 0461 @DL_LONGLN: - - OUT_8 SC_Data, BL ; Set the Left Clip Mask - 0461 BA 03C5 1 MOV DX, SC_Data ; then Select Register - 0464 8A C3 1 MOV AL, BL ; then Get Data Value - 0466 EE 1 OUT DX, AL ; Set I/O Register - - 0467 8A 46 0A MOV AL, [BP].DL_ColorF ; Get Line Color - 046A 8A D8 MOV BL, AL ; BL = Copy of Line Color - 046C AA STOSB ; Set Left (1-4) Pixels - - 046D E3 55 JCXZ @DL_EXIT ; Done if only one Line Segment - - 046F 49 DEC CX ; CX = # of Middle Segments - 0470 74 07 JZ @DL_XRSEG ; If no middle segments.... - - ; Draw Middle Segments - - OUT_8 DX, ALL_PLANES ; Write to ALL Planes - 0472 B0 0F 1 MOV AL, ALL_PLANES ; then Get Data Value - 0474 EE 1 OUT DX, AL ; Set I/O Register - - 0475 8A C3 MOV AL, BL ; Get Color from BL - 0477 F3/ AA REP STOSB ; Draw Middle (4 Pixel) Segments - - 0479 @DL_XRSEG: - OUT_8 DX, BH ; Select Planes for Right Clip Mask - 0479 8A C7 1 MOV AL, BH ; then Get Data Value - 047B EE 1 OUT DX, AL ; Set I/O Register - 047C 8A C3 MOV AL, BL ; Get Color Value - 047E AA STOSB ; Draw Right (1-4) Pixels - - 047F EB 43 JMP s @DL_EXIT ; We Are Done... - - - ; This Code Draws A Vertical Line. On entry: - ; CH = Line Color, SI & DI = X1 - - 0481 @DL_VLINE: - - 0481 8B 46 10 MOV AX, [BP].DL_Ypos1 ; AX = Y1 - 0484 8B 76 0C MOV SI, [BP].DL_Ypos2 ; SI = Y2 - 0487 3B C6 CMP AX, SI ; Is Y1 < Y2? - 0489 7E 01 JLE @DL_NOSWAP2 ; if so, Don't Swap them - - 048B 96 XCHG AX, SI ; Ok, NOW Y1 < Y2 - - 048C @DL_NOSWAP2: - - 048C 2B F0 SUB SI, AX ; SI = Line Height (Y2-Y1+1) - 048E 46 INC SI - - ; AX = Y1, DI = X1, Get offset into Page into AX - - 048F F7 26 0000 R MUL SCREEN_WIDTH ; Offset = Y1 (AX) * Screen Width - 0493 8B D7 MOV DX, DI ; Copy Xpos into DX - 0495 C1 EF 02 SHR DI, 2 ; DI = Xpos/4 - 0498 03 C7 ADD AX, DI ; DI = Xpos/4 + ScreenWidth * Y1 - - 049A C4 3E 0014 R LES DI, d CURRENT_PAGE ; Point to Active VGA Page - 049E 03 F8 ADD DI, AX ; Point to Pixel X1, Y1 - - ;Select Plane - - 04A0 8A CA MOV CL, DL ; CL = Save X1 - 04A2 80 E1 03 AND CL, PLANE_BITS ; Get X1 MOD 4 (Plane #) - 04A5 B8 0102 MOV AX, MAP_MASK_PLANE1 ; Code to set Plane #1 - 04A8 D2 E4 SHL AH, CL ; Change to Correct Plane # - OUT_16 SC_Index, AX ; Select Plane - 04AA BA 03C4 1 MOV DX, SC_Index ; then Select Register - 04AD EF 1 OUT DX, AX ; Set I/O Register(s) - - 04AE 8A C5 MOV AL, CH ; Get Saved Color - 04B0 8B 1E 0000 R MOV BX, SCREEN_WIDTH ; Get Offset to Advance Line By - - 04B4 @DL_VLoop: - 04B4 26: 88 05 MOV ES:[DI], AL ; Draw Single Pixel - 04B7 03 FB ADD DI, BX ; Point to Next Line - LOOPjz SI, @DL_EXIT ; Lines--, Exit if done - 04B9 4E 1 DEC SI ; Counter-- - 04BA 74 08 1 JZ @DL_EXIT ; Jump if 0 - - 04BC 26: 88 05 MOV ES:[DI], AL ; Draw Single Pixel - 04BF 03 FB ADD DI, BX ; Point to Next Line - LOOPx SI, @DL_VLoop ; Lines--, Loop until Done - 04C1 4E 1 DEC SI ; Counter-- - 04C2 75 F0 1 JNZ @DL_VLoop ; Jump if not 0 - - 04C4 @DL_EXIT: - - 04C4 E9 0157 JMP @DL_EXIT2 ; Done! - - ; This code Draws a diagonal line in Mode X - - 04C7 @DL_BREZHAM: - 04C7 C4 3E 0014 R LES DI, d CURRENT_PAGE ; Point to Active VGA Page - - 04CB 8B 46 10 MOV AX, [BP].DL_Ypos1 ; get Y1 value - 04CE 8B 5E 0C MOV BX, [BP].DL_Ypos2 ; get Y2 value - 04D1 8B 4E 12 MOV CX, [BP].DL_Xpos1 ; Get Starting Xpos - - 04D4 3B D8 CMP BX, AX ; Y2-Y1 is? - 04D6 73 04 JNC @DL_DeltaYOK ; if Y2>=Y1 then goto... - - 04D8 93 XCHG BX, AX ; Swap em... - 04D9 8B 4E 0E MOV CX, [BP].DL_Xpos2 ; Get New Starting Xpos - - 04DC @DL_DeltaYOK: - 04DC F7 26 0000 R MUL SCREEN_WIDTH ; Offset = SCREEN_WIDTH * Y1 - - Microsoft (R) Macro Assembler Version 6.11 07/02/14 15:18:33 -modex.asm Page 6 - 1 - - - 04E0 03 F8 ADD DI, AX ; DI -> Start of Line Y1 on Page - 04E2 8B C1 MOV AX, CX ; AX = Xpos (X1) - 04E4 C1 E8 02 SHR AX, 2 ; /4 = Byte Offset into Line - 04E7 03 F8 ADD DI, AX ; DI = Starting pos (X1,Y1) - - 04E9 B0 11 MOV AL, 11h ; Staring Mask - 04EB 80 E1 03 AND CL, PLANE_BITS ; Get Plane # - 04EE D2 E0 SHL AL, CL ; and shift into place - 04F0 8A 66 0A MOV AH, [BP].DL_ColorF ; Color in Hi Bytes - - 04F3 50 PUSH AX ; Save Mask,Color... - - 04F4 8A E0 MOV AH, AL ; Plane # in AH - 04F6 B0 02 MOV AL, MAP_MASK ; Select Plane Register - OUT_16 SC_Index, AX ; Select initial plane - 04F8 BA 03C4 1 MOV DX, SC_Index ; then Select Register - 04FB EF 1 OUT DX, AX ; Set I/O Register(s) - - 04FC 8B 46 12 MOV AX, [BP].DL_Xpos1 ; get X1 value - 04FF 8B 5E 10 MOV BX, [BP].DL_Ypos1 ; get Y1 value - 0502 8B 4E 0E MOV CX, [BP].DL_Xpos2 ; get X2 value - 0505 8B 56 0C MOV DX, [BP].DL_Ypos2 ; get Y2 value - - 0508 8B 2E 0000 R MOV BP, SCREEN_WIDTH ; Use BP for Line width to - ; to avoid extra memory access - - 050C 2B D3 SUB DX, BX ; figure Delta_Y - 050E 73 05 JNC @DL_DeltaYOK2 ; jump if Y2 >= Y1 - - 0510 03 DA ADD BX, DX ; put Y2 into Y1 - 0512 F7 DA NEG DX ; abs(Delta_Y) - 0514 91 XCHG AX, CX ; and exchange X1 and X2 - - 0515 @DL_DeltaYOK2: - 0515 BB 8000 MOV BX, 08000H ; seed for fraction accumulator - - 0518 2B C8 SUB CX, AX ; figure Delta_X - 051A 72 03 JC @DL_DrawLeft ; if negative, go left - - 051C E9 0084 JMP @DL_DrawRight ; Draw Line that slopes right - - 051F @DL_DrawLeft: - - 051F F7 D9 NEG CX ; abs(Delta_X) - - 0521 3B CA CMP CX, DX ; is Delta_X < Delta_Y? - 0523 72 41 JB @DL_SteepLeft ; yes, so go do steep line - ; (Delta_Y iterations) - - ; Draw a Shallow line to the left in Mode X - - 0525 @DL_ShallowLeft: - CLR AX ; zero low word of Delta_Y * 10000h - 0525 33 C0 1 XOR AX, AX ; Set Register = 0 - 0527 2B C2 SUB AX, DX ; DX:AX <- DX * 0FFFFh - 0529 83 DA 00 SBB DX, 0 ; include carry - 052C F7 F1 DIV CX ; divide by Delta_X - - 052E 8B F3 MOV SI, BX ; SI = Accumulator - 0530 8B D8 MOV BX, AX ; BX = Add fraction - 0532 58 POP AX ; Get Color, Bit mask - 0533 BA 03C5 MOV DX, SC_Data ; Sequence controller data register - 0536 41 INC CX ; Inc Delta_X so we can unroll loop - - ; Loop (x2) to Draw Pixels, Move Left, and Maybe Down... - - 0537 @DL_SLLLoop: - 0537 26: 88 25 MOV ES:[DI], AH ; set first pixel, plane data set up - LOOPjz CX, @DL_SLLExit ; Delta_X--, Exit if done - 053A 49 1 DEC CX ; Counter-- - 053B 74 26 1 JZ @DL_SLLExit ; Jump if 0 - - 053D 03 F3 ADD SI, BX ; add numerator to accumulator - 053F 73 02 JNC @DL_SLLL2nc ; move down on carry - - 0541 03 FD ADD DI, BP ; Move Down one line... - - 0543 @DL_SLLL2nc: - 0543 4F DEC DI ; Left one addr - 0544 D0 C8 ROR AL, 1 ; Move Left one plane, back on 0 1 2 - 0546 3C 87 CMP AL, 87h ; wrap?, if AL <88 then Carry set - 0548 83 D7 00 ADC DI, 0 ; Adjust Address: DI = DI + Carry - 054B EE OUT DX, AL ; Set up New Bit Plane mask - - 054C 26: 88 25 MOV ES:[DI], AH ; set pixel - LOOPjz CX, @DL_SLLExit ; Delta_X--, Exit if done - 054F 49 1 DEC CX ; Counter-- - 0550 74 11 1 JZ @DL_SLLExit ; Jump if 0 - - 0552 03 F3 ADD SI, BX ; add numerator to accumulator, - 0554 73 02 JNC @DL_SLLL3nc ; move down on carry - - 0556 03 FD ADD DI, BP ; Move Down one line... - - 0558 @DL_SLLL3nc: ; Now move left a pixel... - 0558 4F DEC DI ; Left one addr - 0559 D0 C8 ROR AL, 1 ; Move Left one plane, back on 0 1 2 - 055B 3C 87 CMP AL, 87h ; Wrap?, if AL <88 then Carry set - 055D 83 D7 00 ADC DI, 0 ; Adjust Address: DI = DI + Carry - 0560 EE OUT DX, AL ; Set up New Bit Plane mask - 0561 EB D4 JMP s @DL_SLLLoop ; loop until done - - 0563 @DL_SLLExit: - 0563 E9 00B8 JMP @DL_EXIT2 ; and exit - - ; Draw a steep line to the left in Mode X - - 0566 @DL_SteepLeft: - CLR AX ; zero low word of Delta_Y * 10000h - 0566 33 C0 1 XOR AX, AX ; Set Register = 0 - 0568 87 D1 XCHG DX, CX ; Delta_Y switched with Delta_X - 056A F7 F1 DIV CX ; divide by Delta_Y - - 056C 8B F3 MOV SI, BX ; SI = Accumulator - 056E 8B D8 MOV BX, AX ; BX = Add Fraction - 0570 58 POP AX ; Get Color, Bit mask - 0571 BA 03C5 MOV DX, SC_Data ; Sequence controller data register - 0574 41 INC CX ; Inc Delta_Y so we can unroll loop - - ; Loop (x2) to Draw Pixels, Move Down, and Maybe left - - 0575 @DL_STLLoop: - - 0575 26: 88 25 MOV ES:[DI], AH ; set first pixel - LOOPjz CX, @DL_STLExit ; Delta_Y--, Exit if done - 0578 49 1 DEC CX ; Counter-- - 0579 74 26 1 JZ @DL_STLExit ; Jump if 0 - - 057B 03 F3 ADD SI, BX ; add numerator to accumulator - 057D 73 09 JNC @DL_STLnc2 ; No carry, just move down! - - 057F 4F DEC DI ; Move Left one addr - 0580 D0 C8 ROR AL, 1 ; Move Left one plane, back on 0 1 2 - 0582 3C 87 CMP AL, 87h ; Wrap?, if AL <88 then Carry set - 0584 83 D7 00 ADC DI, 0 ; Adjust Address: DI = DI + Carry - 0587 EE OUT DX, AL ; Set up New Bit Plane mask - - 0588 @DL_STLnc2: - 0588 03 FD ADD DI, BP ; advance to next line. - - 058A 26: 88 25 MOV ES:[DI], AH ; set pixel - LOOPjz CX, @DL_STLExit ; Delta_Y--, Exit if done - 058D 49 1 DEC CX ; Counter-- - 058E 74 11 1 JZ @DL_STLExit ; Jump if 0 - - 0590 03 F3 ADD SI, BX ; add numerator to accumulator - 0592 73 09 JNC @DL_STLnc3 ; No carry, just move down! - - 0594 4F DEC DI ; Move Left one addr - 0595 D0 C8 ROR AL, 1 ; Move Left one plane, back on 0 1 2 - 0597 3C 87 CMP AL, 87h ; Wrap?, if AL <88 then Carry set - 0599 83 D7 00 ADC DI, 0 ; Adjust Address: DI = DI + Carry - 059C EE OUT DX, AL ; Set up New Bit Plane mask - - 059D @DL_STLnc3: - 059D 03 FD ADD DI, BP ; advance to next line. - 059F EB D4 JMP s @DL_STLLoop ; Loop until done - - 05A1 @DL_STLExit: - 05A1 EB 7B JMP @DL_EXIT2 ; and exit - - ; Draw a line that goes to the Right... - - 05A3 @DL_DrawRight: - 05A3 3B CA CMP CX, DX ; is Delta_X < Delta_Y? - 05A5 72 3E JB @DL_SteepRight ; yes, so go do steep line - ; (Delta_Y iterations) - - ; Draw a Shallow line to the Right in Mode X - - 05A7 @DL_ShallowRight: - CLR AX ; zero low word of Delta_Y * 10000h - 05A7 33 C0 1 XOR AX, AX ; Set Register = 0 - 05A9 2B C2 SUB AX, DX ; DX:AX <- DX * 0FFFFh - 05AB 83 DA 00 SBB DX, 0 ; include carry - 05AE F7 F1 DIV CX ; divide by Delta_X - - 05B0 8B F3 MOV SI, BX ; SI = Accumulator - 05B2 8B D8 MOV BX, AX ; BX = Add Fraction - 05B4 58 POP AX ; Get Color, Bit mask - 05B5 BA 03C5 MOV DX, SC_Data ; Sequence controller data register - 05B8 41 INC CX ; Inc Delta_X so we can unroll loop - - ; Loop (x2) to Draw Pixels, Move Right, and Maybe Down... - - 05B9 @DL_SLRLoop: - 05B9 26: 88 25 MOV ES:[DI], AH ; set first pixel, mask is set up - LOOPjz CX, @DL_SLRExit ; Delta_X--, Exit if done.. - 05BC 49 1 DEC CX ; Counter-- - 05BD 74 24 1 JZ @DL_SLRExit ; Jump if 0 - - 05BF 03 F3 ADD SI, BX ; add numerator to accumulator - 05C1 73 02 JNC @DL_SLR2nc ; don't move down if carry not set - - 05C3 03 FD ADD DI, BP ; Move Down one line... - - 05C5 @DL_SLR2nc: ; Now move right a pixel... - 05C5 D0 C0 ROL AL, 1 ; Move Right one addr if Plane = 0 - 05C7 3C 12 CMP AL, 12h ; Wrap? if AL >12 then Carry not set - 05C9 83 D7 00 ADC DI, 0 ; Adjust Address: DI = DI + Carry - 05CC EE OUT DX, AL ; Set up New Bit Plane mask - - 05CD 26: 88 25 MOV ES:[DI], AH ; set pixel - LOOPjz CX, @DL_SLRExit ; Delta_X--, Exit if done.. - 05D0 49 1 DEC CX ; Counter-- - 05D1 74 10 1 JZ @DL_SLRExit ; Jump if 0 - - 05D3 03 F3 ADD SI, BX ; add numerator to accumulator - 05D5 73 02 JNC @DL_SLR3nc ; don't move down if carry not set - - 05D7 03 FD ADD DI, BP ; Move Down one line... - - 05D9 @DL_SLR3nc: - 05D9 D0 C0 ROL AL, 1 ; Move Right one addr if Plane = 0 - 05DB 3C 12 CMP AL, 12h ; Wrap? if AL >12 then Carry not set - 05DD 83 D7 00 ADC DI, 0 ; Adjust Address: DI = DI + Carry - 05E0 EE OUT DX, AL ; Set up New Bit Plane mask - 05E1 EB D6 JMP s @DL_SLRLoop ; loop till done - - 05E3 @DL_SLRExit: - 05E3 EB 39 JMP @DL_EXIT2 ; and exit - - ; Draw a Steep line to the Right in Mode X - - 05E5 @DL_SteepRight: - CLR AX ; zero low word of Delta_Y * 10000h - 05E5 33 C0 1 XOR AX, AX ; Set Register = 0 - 05E7 87 D1 XCHG DX, CX ; Delta_Y switched with Delta_X - 05E9 F7 F1 DIV CX ; divide by Delta_Y - - 05EB 8B F3 MOV SI, BX ; SI = Accumulator - 05ED 8B D8 MOV BX, AX ; BX = Add Fraction - 05EF 58 POP AX ; Get Color, Bit mask - 05F0 BA 03C5 MOV DX, SC_Data ; Sequence controller data register - 05F3 41 INC CX ; Inc Delta_Y so we can unroll loop - - ; Loop (x2) to Draw Pixels, Move Down, and Maybe Right - - 05F4 @STRLoop: - 05F4 26: 88 25 MOV ES:[DI], AH ; set first pixel, mask is set up - LOOPjz CX, @DL_EXIT2 ; Delta_Y--, Exit if Done - 05F7 49 1 DEC CX ; Counter-- - 05F8 74 24 1 JZ @DL_EXIT2 ; Jump if 0 - - 05FA 03 F3 ADD SI, BX ; add numerator to accumulator - 05FC 73 08 JNC @STRnc2 ; if no carry then just go down... - - 05FE D0 C0 ROL AL, 1 ; Move Right one addr if Plane = 0 - 0600 3C 12 CMP AL, 12h ; Wrap? if AL >12 then Carry not set - 0602 83 D7 00 ADC DI, 0 ; Adjust Address: DI = DI + Carry - 0605 EE OUT DX, AL ; Set up New Bit Plane mask - Microsoft (R) Macro Assembler Version 6.11 07/02/14 15:18:33 -modex.asm Page 7 - 1 - - - - 0606 @STRnc2: - 0606 03 FD ADD DI, BP ; advance to next line. - - 0608 26: 88 25 MOV ES:[DI], AH ; set pixel - LOOPjz CX, @DL_EXIT2 ; Delta_Y--, Exit if Done - 060B 49 1 DEC CX ; Counter-- - 060C 74 10 1 JZ @DL_EXIT2 ; Jump if 0 - - 060E 03 F3 ADD SI, BX ; add numerator to accumulator - 0610 73 08 JNC @STRnc3 ; if no carry then just go down... - - 0612 D0 C0 ROL AL, 1 ; Move Right one addr if Plane = 0 - 0614 3C 12 CMP AL, 12h ; Wrap? if AL >12 then Carry not set - 0616 83 D7 00 ADC DI, 0 ; Adjust Address: DI = DI + Carry - 0619 EE OUT DX, AL ; Set up New Bit Plane mask - - 061A @STRnc3: - 061A 03 FD ADD DI, BP ; advance to next line. - 061C EB D6 JMP s @STRLoop ; loop till done - - 061E @DL_EXIT2: - POPx DI, SI, BP ; Restore Saved Registers - 061E 5F 1 POP DI ; Restore R1 - 061F 5E 2 POP SI ; Restore R1 - 0620 5D 3 POP BP ; Restore R1 - 0621 CA 000A RET 10 ; Exit and Clean up Stack - - 0624 DRAW_LINE ENDP - - - ; ===== DAC COLOR REGISTER ROUTINES ===== - - ;================================================= - ;SET_DAC_REGISTER (Register%, Red%, Green%, Blue%) - ;================================================= - ; - ; Sets a single (RGB) Vga Palette Register - ; - ; ENTRY: Register = The DAC # to modify (0-255) - ; Red = The new Red Intensity (0-63) - ; Green = The new Green Intensity (0-63) - ; Blue = The new Blue Intensity (0-63) - ; - ; EXIT: No meaningful values returned - ; - - 000E SDR_STACK STRUC - 0000 0000 DW ? ; BP - 0002 00000000 DD ? ; Caller - 0006 00 00 SDR_Blue DB ?,? ; Blue Data Value - 0008 00 00 SDR_Green DB ?,? ; Green Data Value - 000A 00 00 SDR_Red DB ?,? ; Red Data Value - 000C 00 00 SDR_Register DB ?,? ; Palette Register # - SDR_STACK ENDS - - PUBLIC SET_DAC_REGISTER - - 0624 SET_DAC_REGISTER PROC FAR - - 0624 55 PUSH BP ; Save BP - 0625 8B EC MOV BP, SP ; Set up Stack Frame - - ; Select which DAC Register to modify - - OUT_8 DAC_WRITE_ADDR, [BP].SDR_Register - 0627 BA 03C8 1 MOV DX, DAC_WRITE_ADDR ; then Select Register - 062A 8A 46 0C 1 MOV AL, [BP].SDR_Register ; then Get Data Value - 062D EE 1 OUT DX, AL ; Set I/O Register - - 062E BA 03C9 MOV DX, PEL_DATA_REG ; Dac Data Register - OUT_8 DX, [BP].SDR_Red ; Set Red Intensity - 0631 8A 46 0A 1 MOV AL, [BP].SDR_Red ; then Get Data Value - 0634 EE 1 OUT DX, AL ; Set I/O Register - OUT_8 DX, [BP].SDR_Green ; Set Green Intensity - 0635 8A 46 08 1 MOV AL, [BP].SDR_Green ; then Get Data Value - 0638 EE 1 OUT DX, AL ; Set I/O Register - OUT_8 DX, [BP].SDR_Blue ; Set Blue Intensity - 0639 8A 46 06 1 MOV AL, [BP].SDR_Blue ; then Get Data Value - 063C EE 1 OUT DX, AL ; Set I/O Register - - 063D 5D POP BP ; Restore Registers - 063E CA 0008 RET 8 ; Exit & Clean Up Stack - - 0641 SET_DAC_REGISTER ENDP - - ;==================================================== - ;GET_DAC_REGISTER (Register%, &Red%, &Green%, &Blue%) - ;==================================================== - ; - ; Reads the RGB Values of a single Vga Palette Register - ; - ; ENTRY: Register = The DAC # to read (0-255) - ; Red = Offset to Red Variable in DS - ; Green = Offset to Green Variable in DS - ; Blue = Offset to Blue Variable in DS - ; - ; EXIT: The values of the integer variables Red, - ; Green, and Blue are set to the values - ; taken from the specified DAC register. - ; - - 000E GDR_STACK STRUC - 0000 0000 DW ? ; BP - 0002 00000000 DD ? ; Caller - 0006 0000 GDR_Blue DW ? ; Addr of Blue Data Value in DS - 0008 0000 GDR_Green DW ? ; Addr of Green Data Value in DS - 000A 0000 GDR_Red DW ? ; Addr of Red Data Value in DS - 000C 00 00 GDR_Register DB ?,? ; Palette Register # - GDR_STACK ENDS - - PUBLIC GET_DAC_REGISTER - - 0641 GET_DAC_REGISTER PROC FAR - - 0641 55 PUSH BP ; Save BP - 0642 8B EC MOV BP, SP ; Set up Stack Frame - - ; Select which DAC Register to read in - - OUT_8 DAC_READ_ADDR, [BP].GDR_Register - 0644 BA 03C7 1 MOV DX, DAC_READ_ADDR ; then Select Register - 0647 8A 46 0C 1 MOV AL, [BP].GDR_Register ; then Get Data Value - 064A EE 1 OUT DX, AL ; Set I/O Register - - 064B BA 03C9 MOV DX, PEL_DATA_REG ; Dac Data Register - CLR AX ; Clear AX - 064E 33 C0 1 XOR AX, AX ; Set Register = 0 - - 0650 EC IN AL, DX ; Read Red Value - 0651 8B 5E 0A MOV BX, [BP].GDR_Red ; Get Address of Red% - 0654 89 07 MOV [BX], AX ; *Red% = AX - - 0656 EC IN AL, DX ; Read Green Value - 0657 8B 5E 08 MOV BX, [BP].GDR_Green ; Get Address of Green% - 065A 89 07 MOV [BX], AX ; *Green% = AX - - 065C EC IN AL, DX ; Read Blue Value - 065D 8B 5E 06 MOV BX, [BP].GDR_Blue ; Get Address of Blue% - 0660 89 07 MOV [BX], AX ; *Blue% = AX - - 0662 5D POP BP ; Restore Registers - 0663 CA 0008 RET 8 ; Exit & Clean Up Stack - - 0666 GET_DAC_REGISTER ENDP - - - ;=========================================================== - ;LOAD_DAC_REGISTERS (SEG PalData, StartReg%, EndReg%, Sync%) - ;=========================================================== - ; - ; Sets a Block of Vga Palette Registers - ; - ; ENTRY: PalData = Far Pointer to Block of palette data - ; StartReg = First Register # in range to set (0-255) - ; EndReg = Last Register # in Range to set (0-255) - ; Sync = Wait for Vertical Retrace Flag (Boolean) - ; - ; EXIT: No meaningful values returned - ; - ; NOTES: PalData is a linear array of 3 byte Palette values - ; in the order: Red (0-63), Green (0-63), Blue (0-63) - ; - - 0014 LDR_STACK STRUC - 0000 0000 0000 0000 DW ?x3 ; BP, DS, SI - 0006 00000000 DD ? ; Caller - 000A 0000 LDR_Sync DW ? ; Vertical Sync Flag - 000C 00 00 LDR_EndReg DB ?,? ; Last Register # - 000E 00 00 LDR_StartReg DB ?,? ; First Register # - 0010 00000000 LDR_PalData DD ? ; Far Ptr to Palette Data - LDR_STACK ENDS - - PUBLIC LOAD_DAC_REGISTERS - - 0666 LOAD_DAC_REGISTERS PROC FAR - - PUSHx BP, DS, SI ; Save Registers - 0666 55 1 PUSH BP ; Save R1 - 0667 1E 2 PUSH DS ; Save R1 - 0668 56 3 PUSH SI ; Save R1 - 0669 8B EC mov BP, SP ; Set up Stack Frame - - 066B 8B 46 0A mov AX, [BP].LDR_Sync ; Get Vertical Sync Flag - 066E 0B C0 or AX, AX ; is Sync Flag = 0? - 0670 74 05 jz @LDR_Load ; if so, skip call - - 0672 9A ---- 0795 R call f SYNC_DISPLAY ; wait for vsync - - ; Determine register #'s, size to copy, etc - - 0677 @LDR_Load: - - 0677 C5 76 10 lds SI, [BP].LDR_PalData ; DS:SI -> Palette Data - 067A BA 03C8 mov DX, DAC_WRITE_ADDR ; DAC register # selector - - CLR AX, BX ; Clear for byte loads - 067D 33 C0 1 XOR AX, AX ; Set Register = 0 - 067F 33 DB 2 XOR BX, BX ; Set Register = 0 - 0681 8A 46 0E mov AL, [BP].LDR_StartReg ; Get Start Register - 0684 8A 5E 0C mov BL, [BP].LDR_EndReg ; Get End Register - - 0687 2B D8 sub BX, AX ; BX = # of DAC registers -1 - 0689 43 inc BX ; BX = # of DAC registers - 068A 8B CB mov CX, BX ; CX = # of DAC registers - 068C 03 CB add CX, BX ; CX = " " * 2 - 068E 03 CB add CX, BX ; CX = " " * 3 - 0690 FC cld ; Block OUTs forward - 0691 EE out DX, AL ; set up correct register # - - ; Load a block of DAC Registers - - 0692 BA 03C9 mov DX, PEL_DATA_REG ; Dac Data Register - - 0695 F3/ 6E rep outsb ; block set DAC registers - - POPx SI, DS, BP ; Restore Registers - 0697 5E 1 POP SI ; Restore R1 - 0698 1F 2 POP DS ; Restore R1 - 0699 5D 3 POP BP ; Restore R1 - 069A CA 000A ret 10 ; Exit & Clean Up Stack - - 069D LOAD_DAC_REGISTERS ENDP - - - ;==================================================== - ;READ_DAC_REGISTERS (SEG PalData, StartReg%, EndReg%) - ;==================================================== - ; - ; Reads a Block of Vga Palette Registers - ; - ; ENTRY: PalData = Far Pointer to block to store palette data - ; StartReg = First Register # in range to read (0-255) - ; EndReg = Last Register # in Range to read (0-255) - ; - ; EXIT: No meaningful values returned - ; - ; NOTES: PalData is a linear array of 3 byte Palette values - ; in the order: Red (0-63), Green (0-63), Blue (0-63) - ; - - 0012 RDR_STACK STRUC - 0000 0000 0000 0000 DW ?x3 ; BP, ES, DI - 0006 00000000 DD ? ; Caller - 000A 00 00 RDR_EndReg DB ?,? ; Last Register # - 000C 00 00 RDR_StartReg DB ?,? ; First Register # - 000E 00000000 RDR_PalData DD ? ; Far Ptr to Palette Data - RDR_STACK ENDS - - PUBLIC READ_DAC_REGISTERS - - Microsoft (R) Macro Assembler Version 6.11 07/02/14 15:18:33 -modex.asm Page 8 - 1 - - - 069D READ_DAC_REGISTERS PROC FAR - - PUSHx BP, ES, DI ; Save Registers - 069D 55 1 PUSH BP ; Save R1 - 069E 06 2 PUSH ES ; Save R1 - 069F 57 3 PUSH DI ; Save R1 - 06A0 8B EC mov BP, SP ; Set up Stack Frame - - ; Determine register #'s, size to copy, etc - - 06A2 C4 7E 0E les DI, [BP].RDR_PalData ; ES:DI -> Palette Buffer - 06A5 BA 03C7 mov DX, DAC_READ_ADDR ; DAC register # selector - - CLR AX, BX ; Clear for byte loads - 06A8 33 C0 1 XOR AX, AX ; Set Register = 0 - 06AA 33 DB 2 XOR BX, BX ; Set Register = 0 - 06AC 8A 46 0C mov AL, [BP].RDR_StartReg ; Get Start Register - 06AF 8A 5E 0A mov BL, [BP].RDR_EndReg ; Get End Register - - 06B2 2B D8 sub BX, AX ; BX = # of DAC registers -1 - 06B4 43 inc BX ; BX = # of DAC registers - 06B5 8B CB mov CX, BX ; CX = # of DAC registers - 06B7 03 CB add CX, BX ; CX = " " * 2 - 06B9 03 CB add CX, BX ; CX = " " * 3 - 06BB FC cld ; Block INs forward - - ; Read a block of DAC Registers - - 06BC EE out DX, AL ; set up correct register # - 06BD BA 03C9 mov DX, PEL_DATA_REG ; Dac Data Register - - 06C0 F3/ 6C rep insb ; block read DAC registers - - POPx DI, ES, BP ; Restore Registers - - 06C2 5F 1 POP DI ; Restore R1 - 06C3 07 2 POP ES ; Restore R1 - 06C4 5D 3 POP BP ; Restore R1 - 06C5 CA 0008 ret 8 ; Exit & Clean Up Stack - - 06C8 READ_DAC_REGISTERS ENDP - - - ; ===== PAGE FLIPPING AND SCROLLING ROUTINES ===== - - ;========================= - ;SET_ACTIVE_PAGE (PageNo%) - ;========================= - ; - ; Sets the active display Page to be used for future drawing - ; - ; ENTRY: PageNo = Display Page to make active - ; (values: 0 to Number of Pages - 1) - ; - ; EXIT: No meaningful values returned - ; - - 0008 SAP_STACK STRUC - 0000 0000 DW ? ; BP - 0002 00000000 DD ? ; Caller - 0006 0000 SAP_Page DW ? ; Page # for Drawing - SAP_STACK ENDS - - PUBLIC SET_ACTIVE_PAGE - - 06C8 SET_ACTIVE_PAGE PROC FAR - - 06C8 55 PUSH BP ; Preserve Registers - 06C9 8B EC MOV BP, SP ; Set up Stack Frame - - 06CB 8B 5E 06 MOV BX, [BP].SAP_Page ; Get Desired Page # - 06CE 3B 1E 0004 R CMP BX, LAST_PAGE ; Is Page # Valid? - 06D2 73 0D JAE @SAP_Exit ; IF Not, Do Nothing - - 06D4 89 1E 0012 R MOV ACTIVE_PAGE, BX ; Set Active Page # - - 06D8 D1 E3 SHL BX, 1 ; Scale Page # to Word - 06DA 8B 87 0006 R MOV AX, PAGE_ADDR[BX] ; Get offset to Page - - 06DE A3 0014 R MOV CURRENT_PAGE, AX ; And set for future LES's - - 06E1 @SAP_Exit: - 06E1 5D POP BP ; Restore Registers - 06E2 CA 0002 RET 2 ; Exit and Clean up Stack - - 06E5 SET_ACTIVE_PAGE ENDP - - - ;================ - ;GET_ACTIVE_PAGE% - ;================ - ; - ; Returns the Video Page # currently used for Drawing - ; - ; ENTRY: No Parameters are passed - ; - ; EXIT: AX = Current Video Page used for Drawing - ; - - PUBLIC GET_ACTIVE_PAGE - - 06E5 GET_ACTIVE_PAGE PROC FAR - - 06E5 A1 0012 R MOV AX, ACTIVE_PAGE ; Get Active Page # - 06E8 CB RET ; Exit and Clean up Stack - - 06E9 GET_ACTIVE_PAGE ENDP - - - ;=============================== - ;SET_DISPLAY_PAGE (DisplayPage%) - ;=============================== - ; - ; Sets the currently visible display page. - ; When called this routine syncronizes the display - ; to the vertical blank. - ; - ; ENTRY: PageNo = Display Page to show on the screen - ; (values: 0 to Number of Pages - 1) - ; - ; EXIT: No meaningful values returned - ; - - 0008 SDP_STACK STRUC - 0000 0000 DW ? ; BP - 0002 00000000 DD ? ; Caller - 0006 0000 SDP_Page DW ? ; Page # to Display... - SDP_STACK ENDS - - PUBLIC SET_DISPLAY_PAGE - - 06E9 SET_DISPLAY_PAGE PROC FAR - - 06E9 55 PUSH BP ; Preserve Registers - 06EA 8B EC MOV BP, SP ; Set up Stack Frame - - 06EC 8B 5E 06 MOV BX, [BP].SDP_Page ; Get Desired Page # - 06EF 3B 1E 0004 R CMP BX, LAST_PAGE ; Is Page # Valid? - 06F3 73 2B JAE @SDP_Exit ; IF Not, Do Nothing - - 06F5 89 1E 0010 R MOV DISPLAY_PAGE, BX ; Set Display Page # - - 06F9 D1 E3 SHL BX, 1 ; Scale Page # to Word - 06FB 8B 8F 0006 R MOV CX, PAGE_ADDR[BX] ; Get offset in memory to Page - 06FF 03 0E 001C R ADD CX, CURRENT_MOFFSET ; Adjust for any scrolling - - ; Wait if we are currently in a Vertical Retrace - - 0703 BA 03DA MOV DX, INPUT_1 ; Input Status #1 Register - - 0706 @DP_WAIT0: - 0706 EC IN AL, DX ; Get VGA status - 0707 24 08 AND AL, VERT_RETRACE ; In Display mode yet? - 0709 75 FB JNZ @DP_WAIT0 ; If Not, wait for it - - ; Set the Start Display Address to the new page - - 070B BA 03D4 MOV DX, CRTC_Index ; We Change the VGA Sequencer - - 070E B0 0D MOV AL, START_DISP_LO ; Display Start Low Register - 0710 8A E1 MOV AH, CL ; Low 8 Bits of Start Addr - 0712 EF OUT DX, AX ; Set Display Addr Low - - 0713 B0 0C MOV AL, START_DISP_HI ; Display Start High Register - 0715 8A E5 MOV AH, CH ; High 8 Bits of Start Addr - 0717 EF OUT DX, AX ; Set Display Addr High - - ; Wait for a Vertical Retrace to smooth out things - - 0718 BA 03DA MOV DX, INPUT_1 ; Input Status #1 Register - - 071B @DP_WAIT1: - 071B EC IN AL, DX ; Get VGA status - 071C 24 08 AND AL, VERT_RETRACE ; Vertical Retrace Start? - 071E 74 FB JZ @DP_WAIT1 ; If Not, wait for it - - ; Now Set Display Starting Address - - - 0720 @SDP_Exit: - 0720 5D POP BP ; Restore Registers - 0721 CA 0002 RET 2 ; Exit and Clean up Stack - - 0724 SET_DISPLAY_PAGE ENDP - - - ;================= - ;GET_DISPLAY_PAGE% - ;================= - ; - ; Returns the Video Page # currently displayed - ; - ; ENTRY: No Parameters are passed - ; - ; EXIT: AX = Current Video Page being displayed - ; - - PUBLIC GET_DISPLAY_PAGE - - 0724 GET_DISPLAY_PAGE PROC FAR - - 0724 A1 0010 R MOV AX, DISPLAY_PAGE ; Get Display Page # - 0727 CB RET ; Exit & Clean Up Stack - - 0728 GET_DISPLAY_PAGE ENDP - - - ;======================================= - ;SET_WINDOW (DisplayPage%, Xpos%, Ypos%) - ;======================================= - ; - ; Since a Logical Screen can be larger than the Physical - ; Screen, Scrolling is possible. This routine sets the - ; Upper Left Corner of the Screen to the specified Pixel. - ; Also Sets the Display page to simplify combined page - ; flipping and scrolling. When called this routine - ; syncronizes the display to the vertical blank. - ; - ; ENTRY: DisplayPage = Display Page to show on the screen - ; Xpos = # of pixels to shift screen right - ; Ypos = # of lines to shift screen down - ; - ; EXIT: No meaningful values returned - ; - - 000C SW_STACK STRUC - 0000 0000 DW ? ; BP - 0002 00000000 DD ? ; Caller - 0006 0000 SW_Ypos DW ? ; Y pos of UL Screen Corner - 0008 0000 SW_Xpos DW ? ; X pos of UL Screen Corner - 000A 0000 SW_Page DW ? ; (new) Display Page - SW_STACK ENDS - - PUBLIC SET_WINDOW - - 0728 SET_WINDOW PROC FAR - - 0728 55 PUSH BP ; Preserve Registers - 0729 8B EC MOV BP, SP ; Set up Stack Frame - - ; Check if our Scroll Offsets are Valid - - 072B 8B 5E 0A MOV BX, [BP].SW_Page ; Get Desired Page # - 072E 3B 1E 0004 R CMP BX, LAST_PAGE ; Is Page # Valid? - 0732 73 55 JAE @SW_Exit ; IF Not, Do Nothing - - 0734 8B 46 06 MOV AX, [BP].SW_Ypos ; Get Desired Y Offset - 0737 3B 06 0020 R CMP AX, MAX_YOFFSET ; Is it Within Limits? - 073B 77 4C JA @SW_Exit ; if not, exit - - 073D 8B 4E 08 MOV CX, [BP].SW_Xpos ; Get Desired X Offset - 0740 3B 0E 001E R CMP CX, MAX_XOFFSET ; Is it Within Limits? - Microsoft (R) Macro Assembler Version 6.11 07/02/14 15:18:33 -modex.asm Page 9 - 1 - - - 0744 77 43 JA @SW_Exit ; if not, exit - - ; Compute proper Display start address to use - - 0746 F7 26 0000 R MUL SCREEN_WIDTH ; AX = YOffset * Line Width - 074A C1 E9 02 SHR CX, 2 ; CX / 4 = Bytes into Line - 074D 03 C1 ADD AX, CX ; AX = Offset of Upper Left Pixel - - 074F A3 001C R MOV CURRENT_MOFFSET, AX ; Save Offset Info - - 0752 89 1E 0010 R MOV DISPLAY_PAGE, BX ; Set Current Page # - 0756 D1 E3 SHL BX, 1 ; Scale Page # to Word - 0758 03 87 0006 R ADD AX, PAGE_ADDR[BX] ; Get offset in VGA to Page - 075C 8B D8 MOV BX, AX ; BX = Desired Display Start - - 075E BA 03DA MOV DX, INPUT_1 ; Input Status #1 Register - - ; Wait if we are currently in a Vertical Retrace - - 0761 @SW_WAIT0: - 0761 EC IN AL, DX ; Get VGA status - 0762 24 08 AND AL, VERT_RETRACE ; In Display mode yet? - 0764 75 FB JNZ @SW_WAIT0 ; If Not, wait for it - - ; Set the Start Display Address to the new window - - 0766 BA 03D4 MOV DX, CRTC_Index ; We Change the VGA Sequencer - 0769 B0 0D MOV AL, START_DISP_LO ; Display Start Low Register - 076B 8A E3 MOV AH, BL ; Low 8 Bits of Start Addr - 076D EF OUT DX, AX ; Set Display Addr Low - - 076E B0 0C MOV AL, START_DISP_HI ; Display Start High Register - 0770 8A E7 MOV AH, BH ; High 8 Bits of Start Addr - 0772 EF OUT DX, AX ; Set Display Addr High - - ; Wait for a Vertical Retrace to smooth out things - - 0773 BA 03DA MOV DX, INPUT_1 ; Input Status #1 Register - - 0776 @SW_WAIT1: - 0776 EC IN AL, DX ; Get VGA status - 0777 24 08 AND AL, VERT_RETRACE ; Vertical Retrace Start? - 0779 74 FB JZ @SW_WAIT1 ; If Not, wait for it - - ; Now Set the Horizontal Pixel Pan values - - OUT_8 ATTRIB_Ctrl, PIXEL_PAN_REG ; Select Pixel Pan Register - 077B BA 03C0 1 MOV DX, ATTRIB_Ctrl ; then Select Register - 077E B0 33 1 MOV AL, PIXEL_PAN_REG ; then Get Data Value - 0780 EE 1 OUT DX, AL ; Set I/O Register - - 0781 8B 46 08 MOV AX, [BP].SW_Xpos ; Get Desired X Offset - 0784 24 03 AND AL, 03 ; Get # of Pixels to Pan (0-3) - 0786 D0 E0 SHL AL, 1 ; Shift for 256 Color Mode - 0788 EE OUT DX, AL ; Fine tune the display! - - 0789 @SW_Exit: - 0789 5D POP BP ; Restore Saved Registers - 078A CA 0006 RET 6 ; Exit and Clean up Stack - - 078D SET_WINDOW ENDP - - - ;============= - ;GET_X_OFFSET% - ;============= - ; - ; Returns the X coordinate of the Pixel currently display - ; in the upper left corner of the display - ; - ; ENTRY: No Parameters are passed - ; - ; EXIT: AX = Current Horizontal Scroll Offset - ; - - PUBLIC GET_X_OFFSET - - 078D GET_X_OFFSET PROC FAR - - 078D A1 0018 R MOV AX, CURRENT_XOFFSET ; Get current horz offset - 0790 CB RET ; Exit & Clean Up Stack - - 0791 GET_X_OFFSET ENDP - - - ;============= - ;GET_Y_OFFSET% - ;============= - ; - ; Returns the Y coordinate of the Pixel currently display - ; in the upper left corner of the display - ; - ; ENTRY: No Parameters are passed - ; - ; EXIT: AX = Current Vertical Scroll Offset - ; - - PUBLIC GET_Y_OFFSET - - 0791 GET_Y_OFFSET PROC FAR - - 0791 A1 001A R MOV AX, CURRENT_YOFFSET ; Get current vertical offset - 0794 CB RET ; Exit & Clean Up Stack - - 0795 GET_Y_OFFSET ENDP - - - ;============ - ;SYNC_DISPLAY - ;============ - ; - ; Pauses the computer until the next Vertical Retrace starts - ; - ; ENTRY: No Parameters are passed - ; - ; EXIT: No meaningful values returned - ; - - PUBLIC SYNC_DISPLAY - - 0795 SYNC_DISPLAY PROC FAR - - 0795 BA 03DA MOV DX, INPUT_1 ; Input Status #1 Register - - ; Wait for any current retrace to end - - 0798 @SD_WAIT0: - 0798 EC IN AL, DX ; Get VGA status - 0799 24 08 AND AL, VERT_RETRACE ; In Display mode yet? - 079B 75 FB JNZ @SD_WAIT0 ; If Not, wait for it - - ; Wait for the start of the next vertical retrace - - 079D @SD_WAIT1: - 079D EC IN AL, DX ; Get VGA status - 079E 24 08 AND AL, VERT_RETRACE ; Vertical Retrace Start? - 07A0 74 FB JZ @SD_WAIT1 ; If Not, wait for it - - 07A2 CB RET ; Exit & Clean Up Stack - - 07A3 SYNC_DISPLAY ENDP - - - ; ===== TEXT DISPLAY ROUTINES ===== - - ;================================================== - ;GPRINTC (CharNum%, Xpos%, Ypos%, ColorF%, ColorB%) - ;================================================== - ; - ; Draws an ASCII Text Character using the currently selected - ; 8x8 font on the active display page. It would be a simple - ; exercise to make this routine process variable height fonts. - ; - ; ENTRY: CharNum = ASCII character # to draw - ; Xpos = X position to draw Character at - ; Ypos = Y position of to draw Character at - ; ColorF = Color to draw text character in - ; ColorB = Color to set background to - ; - ; EXIT: No meaningful values returned - ; - - 001E GPC_STACK STRUC - 0000 0000 GPC_Width DW ? ; Screen Width-1 - 0002 00 00 GPC_Lines DB ?,? ; Scan lines to Decode - 0004 0000 GPC_T_SETS DW ? ; Saved Charset Segment - 0006 0000 GPC_T_SETO DW ? ; Saved Charset Offset - 0008 0000 0000 0000 DW ?x4 ; DI, SI, DS, BP - 0000 - 0010 00000000 DD ? ; Caller - 0014 00 00 GPC_ColorB DB ?,? ; Background Color - 0016 00 00 GPC_ColorF DB ?,? ; Text Color - 0018 0000 GPC_Ypos DW ? ; Y Position to Print at - 001A 0000 GPC_Xpos DW ? ; X position to Print at - 001C 00 00 GPC_Char DB ?,? ; Character to Print - GPC_STACK ENDS - - PUBLIC GPRINTC - - 07A3 GPRINTC PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - 07A3 55 1 PUSH BP ; Save R1 - 07A4 1E 2 PUSH DS ; Save R1 - 07A5 56 3 PUSH SI ; Save R1 - 07A6 57 4 PUSH DI ; Save R1 - 07A7 83 EC 08 SUB SP, 8 ; Allocate WorkSpace on Stack - 07AA 8B EC MOV BP, SP ; Set up Stack Frame - - 07AC C4 3E 0014 R LES DI, d CURRENT_PAGE ; Point to Active VGA Page - - 07B0 A1 0000 R MOV AX, SCREEN_WIDTH ; Get Logical Line Width - 07B3 8B D8 MOV BX, AX ; BX = Screen Width - 07B5 4B DEC BX ; = Screen Width-1 - 07B6 89 5E 00 MOV [BP].GPC_Width, BX ; Save for later use - - 07B9 F7 66 18 MUL [BP].GPC_Ypos ; Start of Line = Ypos * Width - 07BC 03 F8 ADD DI, AX ; DI -> Start of Line Ypos - - 07BE 8B 46 1A MOV AX, [BP].GPC_Xpos ; Get Xpos of Character - 07C1 8B C8 MOV CX, AX ; Save Copy of Xpos - 07C3 C1 E8 02 SHR AX, 2 ; Bytes into Line = Xpos/4 - 07C6 03 F8 ADD DI, AX ; DI -> (Xpos, Ypos) - - ;Get Source ADDR of Character Bit Map & Save - - 07C8 8A 46 1C MOV AL, [BP].GPC_Char ; Get Character # - 07CB A8 80 TEST AL, 080h ; Is Hi Bit Set? - 07CD 74 0C JZ @GPC_LowChar ; Nope, use low char set ptr - - 07CF 24 7F AND AL, 07Fh ; Mask Out Hi Bit - 07D1 8B 1E 0026 R MOV BX, CHARSET_HI ; BX = Char Set Ptr:Offset - 07D5 8B 16 0028 R MOV DX, CHARSET_HI+2 ; DX = Char Set Ptr:Segment - 07D9 EB 08 JMP s @GPC_Set_Char ; Go Setup Character Ptr - - 07DB @GPC_LowChar: - - 07DB 8B 1E 0022 R MOV BX, CHARSET_LOW ; BX = Char Set Ptr:Offset - 07DF 8B 16 0024 R MOV DX, CHARSET_LOW+2 ; DX = Char Set Ptr:Segment - - 07E3 @GPC_Set_Char: - 07E3 89 56 04 MOV [BP].GPC_T_SETS, DX ; Save Segment on Stack - - 07E6 B4 00 MOV AH, 0 ; Valid #'s are 0..127 - 07E8 C1 E0 03 SHL AX, 3 ; * 8 Bytes Per Bitmap - 07EB 03 D8 ADD BX, AX ; BX = Offset of Selected char - 07ED 89 5E 06 MOV [BP].GPC_T_SETO, BX ; Save Offset on Stack - - 07F0 83 E1 03 AND CX, PLANE_BITS ; Get Plane # - 07F3 B5 0F MOV CH, ALL_PLANES ; Get Initial Plane mask - 07F5 D2 E5 SHL CH, CL ; And shift into position - 07F7 80 E5 0F AND CH, ALL_PLANES ; And mask to lower nibble - - 07FA B0 04 MOV AL, 04 ; 4-Plane # = # of initial - 07FC 2A C1 SUB AL, CL ; shifts to align bit mask - 07FE 8A C8 MOV CL, AL ; Shift Count for SHL - - ;Get segment of character map - - OUT_8 SC_Index, MAP_MASK ; Setup Plane selections - 0800 BA 03C4 1 MOV DX, SC_Index ; then Select Register - 0803 B0 02 1 MOV AL, MAP_MASK ; then Get Data Value - 0805 EE 1 OUT DX, AL ; Set I/O Register - 0806 42 INC DX ; DX -> SC_Data - - 0807 B0 08 MOV AL, 08 ; 8 Lines to Process - 0809 88 46 02 MOV [BP].GPC_Lines, AL ; Save on Stack - - 080C 8E 5E 04 MOV DS, [BP].GPC_T_SETS ; Point to character set - - 080F @GPC_DECODE_CHAR_BYTE: - Microsoft (R) Macro Assembler Version 6.11 07/02/14 15:18:33 -modex.asm Page 10 - 1 - - - - 080F 8B 76 06 MOV SI, [BP].GPC_T_SETO ; Get DS:SI = String - - 0812 8A 3C MOV BH, [SI] ; Get Bit Map - 0814 46 INC SI ; Point to Next Line - 0815 89 76 06 MOV [BP].GPC_T_SETO, SI ; And save new Pointer... - - CLR AX ; Clear AX - 0818 33 C0 1 XOR AX, AX ; Set Register = 0 - - CLR BL ; Clear BL - 081A 32 DB 1 XOR BL, BL ; Set Register = 0 - 081C D3 C3 ROL BX, CL ; BL holds left edge bits - 081E 8B F3 MOV SI, BX ; Use as Table Index - 0820 83 E6 0F AND SI, CHAR_BITS ; Get Low Bits - 0823 2E: 8A 84 0008 R MOV AL, Char_Plane_Data[SI] ; Get Mask in AL - 0828 74 07 JZ @GPC_NO_LEFT1BITS ; Skip if No Pixels to set - - 082A 8A 66 16 MOV AH, [BP].GPC_ColorF ; Get Foreground Color - 082D EE OUT DX, AL ; Set up Screen Mask - 082E 26: 88 25 MOV ES:[DI], AH ; Write Foreground color - - 0831 @GPC_NO_LEFT1BITS: - 0831 32 C5 XOR AL, CH ; Invert mask for Background - 0833 74 07 JZ @GPC_NO_LEFT0BITS ; Hey, no need for this - - 0835 8A 66 14 MOV AH, [BP].GPC_ColorB ; Get background Color - 0838 EE OUT DX, AL ; Set up Screen Mask - 0839 26: 88 25 MOV ES:[DI], AH ; Write Foreground color - - ;Now Do Middle/Last Band - - 083C @GPC_NO_LEFT0BITS: - 083C 47 INC DI ; Point to next Byte - 083D C1 C3 04 ROL BX, 4 ; Shift 4 bits - - 0840 8B F3 MOV SI, BX ; Make Lookup Pointer - 0842 83 E6 0F AND SI, CHAR_BITS ; Get Low Bits - 0845 2E: 8A 84 0008 R MOV AL, Char_Plane_Data[SI] ; Get Mask in AL - 084A 74 07 JZ @GPC_NO_MIDDLE1BITS ; Skip if no pixels to set - - 084C 8A 66 16 MOV AH, [BP].GPC_ColorF ; Get Foreground Color - 084F EE OUT DX, AL ; Set up Screen Mask - 0850 26: 88 25 MOV ES:[DI], AH ; Write Foreground color - - 0853 @GPC_NO_MIDDLE1BITS: - 0853 34 0F XOR AL, ALL_PLANES ; Invert mask for Background - 0855 74 07 JZ @GPC_NO_MIDDLE0BITS ; Hey, no need for this - - 0857 8A 66 14 MOV AH, [BP].GPC_ColorB ; Get background Color - 085A EE OUT DX, AL ; Set up Screen Mask - 085B 26: 88 25 MOV ES:[DI], AH ; Write Foreground color - - 085E @GPC_NO_MIDDLE0BITS: - 085E 80 F5 0F XOR CH, ALL_PLANES ; Invert Clip Mask - 0861 80 F9 04 CMP CL, 4 ; Aligned by 4? - 0864 74 23 JZ @GPC_NEXT_LINE ; If so, Exit now.. - - 0866 47 INC DI ; Point to next Byte - 0867 C1 C3 04 ROL BX, 4 ; Shift 4 bits - - 086A 8B F3 MOV SI, BX ; Make Lookup Pointer - 086C 83 E6 0F AND SI, CHAR_BITS ; Get Low Bits - 086F 2E: 8A 84 0008 R MOV AL, Char_Plane_Data[SI] ; Get Mask in AL - 0874 74 07 JZ @GPC_NO_RIGHT1BITS ; Skip if No Pixels to set - - 0876 8A 66 16 MOV AH, [BP].GPC_ColorF ; Get Foreground Color - 0879 EE OUT DX, AL ; Set up Screen Mask - 087A 26: 88 25 MOV ES:[DI], AH ; Write Foreground color - - 087D @GPC_NO_RIGHT1BITS: - - 087D 32 C5 XOR AL, CH ; Invert mask for Background - 087F 74 07 JZ @GPC_NO_RIGHT0BITS ; Hey, no need for this - - 0881 8A 66 14 MOV AH, [BP].GPC_ColorB ; Get background Color - 0884 EE OUT DX, AL ; Set up Screen Mask - 0885 26: 88 25 MOV ES:[DI], AH ; Write Foreground color - - 0888 @GPC_NO_RIGHT0BITS: - 0888 4F DEC DI ; Adjust for Next Line Advance - - 0889 @GPC_NEXT_LINE: - 0889 03 7E 00 ADD DI, [BP].GPC_Width ; Point to Next Line - 088C 80 F5 0F XOR CH, CHAR_BITS ; Flip the Clip mask back - - 088F FE 4E 02 DEC [BP].GPC_Lines ; Count Down Lines - 0892 74 03 JZ @GPC_EXIT ; Ok... Done! - - 0894 E9 FF78 JMP @GPC_DECODE_CHAR_BYTE ; Again! Hey! - - 0897 @GPC_EXIT: - 0897 83 C4 08 ADD SP, 08 ; Deallocate stack workspace - POPx DI, SI, DS, BP ; Restore Saved Registers - 089A 5F 1 POP DI ; Restore R1 - 089B 5E 2 POP SI ; Restore R1 - 089C 1F 3 POP DS ; Restore R1 - 089D 5D 4 POP BP ; Restore R1 - 089E CA 000A RET 10 ; Exit and Clean up Stack - - 08A1 GPRINTC ENDP - - - ;========================================== - ;TGPRINTC (CharNum%, Xpos%, Ypos%, ColorF%) - ;========================================== - ; - ; Transparently draws an ASCII Text Character using the - ; currently selected 8x8 font on the active display page. - ; - ; ENTRY: CharNum = ASCII character # to draw - ; Xpos = X position to draw Character at - ; Ypos = Y position of to draw Character at - ; ColorF = Color to draw text character in - ; - ; EXIT: No meaningful values returned - ; - - 001C TGP_STACK STRUC - 0000 0000 TGP_Width DW ? ; Screen Width-1 - 0002 00 00 TGP_Lines DB ?,? ; Scan lines to Decode - 0004 0000 TGP_T_SETS DW ? ; Saved Charset Segment - 0006 0000 TGP_T_SETO DW ? ; Saved Charset Offset - 0008 0000 0000 0000 DW ?x4 ; DI, SI, DS, BP - 0000 - 0010 00000000 DD ? ; Caller - 0014 00 00 TGP_ColorF DB ?,? ; Text Color - 0016 0000 TGP_Ypos DW ? ; Y Position to Print at - 0018 0000 TGP_Xpos DW ? ; X position to Print at - 001A 00 00 TGP_Char DB ?,? ; Character to Print - TGP_STACK ENDS - - PUBLIC TGPRINTC - - 08A1 TGPRINTC PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - 08A1 55 1 PUSH BP ; Save R1 - 08A2 1E 2 PUSH DS ; Save R1 - 08A3 56 3 PUSH SI ; Save R1 - 08A4 57 4 PUSH DI ; Save R1 - 08A5 83 EC 08 SUB SP, 8 ; Allocate WorkSpace on Stack - 08A8 8B EC MOV BP, SP ; Set up Stack Frame - - 08AA C4 3E 0014 R LES DI, d CURRENT_PAGE ; Point to Active VGA Page - - 08AE A1 0000 R MOV AX, SCREEN_WIDTH ; Get Logical Line Width - 08B1 8B D8 MOV BX, AX ; BX = Screen Width - 08B3 4B DEC BX ; = Screen Width-1 - 08B4 89 5E 00 MOV [BP].TGP_Width, BX ; Save for later use - - 08B7 F7 66 16 MUL [BP].TGP_Ypos ; Start of Line = Ypos * Width - 08BA 03 F8 ADD DI, AX ; DI -> Start of Line Ypos - - 08BC 8B 46 18 MOV AX, [BP].TGP_Xpos ; Get Xpos of Character - 08BF 8B C8 MOV CX, AX ; Save Copy of Xpos - 08C1 C1 E8 02 SHR AX, 2 ; Bytes into Line = Xpos/4 - 08C4 03 F8 ADD DI, AX ; DI -> (Xpos, Ypos) - - ;Get Source ADDR of Character Bit Map & Save - - 08C6 8A 46 1A MOV AL, [BP].TGP_Char ; Get Character # - 08C9 A8 80 TEST AL, 080h ; Is Hi Bit Set? - 08CB 74 0C JZ @TGP_LowChar ; Nope, use low char set ptr - - 08CD 24 7F AND AL, 07Fh ; Mask Out Hi Bit - 08CF 8B 1E 0026 R MOV BX, CHARSET_HI ; BX = Char Set Ptr:Offset - 08D3 8B 16 0028 R MOV DX, CHARSET_HI+2 ; DX = Char Set Ptr:Segment - 08D7 EB 08 JMP s @TGP_Set_Char ; Go Setup Character Ptr - - 08D9 @TGP_LowChar: - - 08D9 8B 1E 0022 R MOV BX, CHARSET_LOW ; BX = Char Set Ptr:Offset - 08DD 8B 16 0024 R MOV DX, CHARSET_LOW+2 ; DX = Char Set Ptr:Segment - - 08E1 @TGP_Set_Char: - 08E1 89 56 04 MOV [BP].TGP_T_SETS, DX ; Save Segment on Stack - - 08E4 B4 00 MOV AH, 0 ; Valid #'s are 0..127 - 08E6 C1 E0 03 SHL AX, 3 ; * 8 Bytes Per Bitmap - 08E9 03 D8 ADD BX, AX ; BX = Offset of Selected char - 08EB 89 5E 06 MOV [BP].TGP_T_SETO, BX ; Save Offset on Stack - - 08EE 83 E1 03 AND CX, PLANE_BITS ; Get Plane # - 08F1 B5 0F MOV CH, ALL_PLANES ; Get Initial Plane mask - 08F3 D2 E5 SHL CH, CL ; And shift into position - 08F5 80 E5 0F AND CH, ALL_PLANES ; And mask to lower nibble - - 08F8 B0 04 MOV AL, 04 ; 4-Plane # = # of initial - 08FA 2A C1 SUB AL, CL ; shifts to align bit mask - 08FC 8A C8 MOV CL, AL ; Shift Count for SHL - - ;Get segment of character map - - OUT_8 SC_Index, MAP_MASK ; Setup Plane selections - 08FE BA 03C4 1 MOV DX, SC_Index ; then Select Register - 0901 B0 02 1 MOV AL, MAP_MASK ; then Get Data Value - 0903 EE 1 OUT DX, AL ; Set I/O Register - 0904 42 INC DX ; DX -> SC_Data - - 0905 B0 08 MOV AL, 08 ; 8 Lines to Process - 0907 88 46 02 MOV [BP].TGP_Lines, AL ; Save on Stack - - 090A 8E 5E 04 MOV DS, [BP].TGP_T_SETS ; Point to character set - - 090D @TGP_DECODE_CHAR_BYTE: - - 090D 8B 76 06 MOV SI, [BP].TGP_T_SETO ; Get DS:SI = String - - 0910 8A 3C MOV BH, [SI] ; Get Bit Map - 0912 46 INC SI ; Point to Next Line - 0913 89 76 06 MOV [BP].TGP_T_SETO, SI ; And save new Pointer... - - 0916 8A 66 14 MOV AH, [BP].TGP_ColorF ; Get Foreground Color - - CLR BL ; Clear BL - 0919 32 DB 1 XOR BL, BL ; Set Register = 0 - 091B D3 C3 ROL BX, CL ; BL holds left edge bits - 091D 8B F3 MOV SI, BX ; Use as Table Index - 091F 83 E6 0F AND SI, CHAR_BITS ; Get Low Bits - 0922 2E: 8A 84 0008 R MOV AL, Char_Plane_Data[SI] ; Get Mask in AL - 0927 74 04 JZ @TGP_NO_LEFT1BITS ; Skip if No Pixels to set - - 0929 EE OUT DX, AL ; Set up Screen Mask - 092A 26: 88 25 MOV ES:[DI], AH ; Write Foreground color - - ;Now Do Middle/Last Band - - 092D @TGP_NO_LEFT1BITS: - - 092D 47 INC DI ; Point to next Byte - 092E C1 C3 04 ROL BX, 4 ; Shift 4 bits - - 0931 8B F3 MOV SI, BX ; Make Lookup Pointer - 0933 83 E6 0F AND SI, CHAR_BITS ; Get Low Bits - 0936 2E: 8A 84 0008 R MOV AL, Char_Plane_Data[SI] ; Get Mask in AL - 093B 74 04 JZ @TGP_NO_MIDDLE1BITS ; Skip if no pixels to set - - 093D EE OUT DX, AL ; Set up Screen Mask - 093E 26: 88 25 MOV ES:[DI], AH ; Write Foreground color - - 0941 @TGP_NO_MIDDLE1BITS: - 0941 80 F5 0F XOR CH, ALL_PLANES ; Invert Clip Mask - 0944 80 F9 04 CMP CL, 4 ; Aligned by 4? - 0947 74 15 JZ @TGP_NEXT_LINE ; If so, Exit now.. - - 0949 47 INC DI ; Point to next Byte - 094A C1 C3 04 ROL BX, 4 ; Shift 4 bits - - 094D 8B F3 MOV SI, BX ; Make Lookup Pointer - 094F 83 E6 0F AND SI, CHAR_BITS ; Get Low Bits - Microsoft (R) Macro Assembler Version 6.11 07/02/14 15:18:33 -modex.asm Page 11 - 1 - - - 0952 2E: 8A 84 0008 R MOV AL, Char_Plane_Data[SI] ; Get Mask in AL - 0957 74 04 JZ @TGP_NO_RIGHT1BITS ; Skip if No Pixels to set - - 0959 EE OUT DX, AL ; Set up Screen Mask - 095A 26: 88 25 MOV ES:[DI], AH ; Write Foreground color - - 095D @TGP_NO_RIGHT1BITS: - - 095D 4F DEC DI ; Adjust for Next Line Advance - - 095E @TGP_NEXT_LINE: - 095E 03 7E 00 ADD DI, [BP].TGP_Width ; Point to Next Line - 0961 80 F5 0F XOR CH, CHAR_BITS ; Flip the Clip mask back - - 0964 FE 4E 02 DEC [BP].TGP_Lines ; Count Down Lines - 0967 74 02 JZ @TGP_EXIT ; Ok... Done! - - 0969 EB A2 JMP @TGP_DECODE_CHAR_BYTE ; Again! Hey! - - 096B @TGP_EXIT: - 096B 83 C4 08 ADD SP, 08 ; Deallocate stack workspace - POPx DI, SI, DS, BP ; Restore Saved Registers - 096E 5F 1 POP DI ; Restore R1 - 096F 5E 2 POP SI ; Restore R1 - 0970 1F 3 POP DS ; Restore R1 - 0971 5D 4 POP BP ; Restore R1 - 0972 CA 0008 RET 8 ; Exit and Clean up Stack - - 0975 TGPRINTC ENDP - - - ;=============================================================== - ;PRINT_STR (SEG String, MaxLen%, Xpos%, Ypos%, ColorF%, ColorB%) - ;=============================================================== - ; - ; Routine to quickly Print a null terminated ASCII string on the - ; active display page up to a maximum length. - ; - ; ENTRY: String = Far Pointer to ASCII string to print - ; MaxLen = # of characters to print if no null found - ; Xpos = X position to draw Text at - ; Ypos = Y position of to draw Text at - ; ColorF = Color to draw text in - ; ColorB = Color to set background to - ; - ; EXIT: No meaningful values returned - ; - - 001A PS_STACK STRUC - 0000 0000 0000 0000 DW ?x4 ; DI, SI, DS, BP - 0000 - 0008 00000000 DD ? ; Caller - 000C 0000 PS_ColorB DW ? ; Background Color - 000E 0000 PS_ColorF DW ? ; Text Color - 0010 0000 PS_Ypos DW ? ; Y Position to Print at - 0012 0000 PS_Xpos DW ? ; X position to Print at - 0014 0000 PS_Len DW ? ; Maximum Length of string to print - 0016 0000 0000 PS_Text DW ?,? ; Far Ptr to Text String - PS_STACK ENDS - - PUBLIC PRINT_STR - - 0975 PRINT_STR PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - 0975 55 1 PUSH BP ; Save R1 - 0976 1E 2 PUSH DS ; Save R1 - 0977 56 3 PUSH SI ; Save R1 - 0978 57 4 PUSH DI ; Save R1 - 0979 8B EC MOV BP, SP ; Set up Stack Frame - - 097B @PS_Print_It: - - 097B 8B 4E 14 MOV CX, [BP].PS_Len ; Get Remaining text Length - 097E E3 2F JCXZ @PS_Exit ; Exit when out of text - - 0980 C4 7E 16 LES DI, d [BP].PS_Text ; ES:DI -> Current Char in Text - 0983 26: 8A 05 MOV AL, ES:[DI] ; AL = Text Character - 0986 25 00FF AND AX, 00FFh ; Clear High Word - 0989 74 24 JZ @PS_Exit ; Exit if null character - - 098B FF 4E 14 DEC [BP].PS_Len ; Remaining Text length-- - 098E FF 46 16 INC [BP].PS_Text ; Point to Next text char - - ; Set up Call to GPRINTC - - 0991 50 PUSH AX ; Set Character Parameter - 0992 8B 5E 12 MOV BX, [BP].PS_Xpos ; Get Xpos - 0995 53 PUSH BX ; Set Xpos Parameter - 0996 83 C3 08 ADD BX, 8 ; Advance 1 Char to Right - 0999 89 5E 12 MOV [BP].PS_Xpos, BX ; Save for next time through - - 099C 8B 5E 10 MOV BX, [BP].PS_Ypos ; Get Ypos - 099F 53 PUSH BX ; Set Ypos Parameter - - 09A0 8B 5E 0E MOV BX, [BP].PS_ColorF ; Get Text Color - 09A3 53 PUSH BX ; Set ColorF Parameter - - 09A4 8B 5E 0C MOV BX, [BP].PS_ColorB ; Get Background Color - 09A7 53 PUSH BX ; Set ColorB Parameter - - 09A8 9A ---- 07A3 R CALL f GPRINTC ; Print Character! - 09AD EB CC JMP s @PS_Print_It ; Process next character - - 09AF @PS_Exit: - POPx DI, SI, DS, BP ; Restore Saved Registers - 09AF 5F 1 POP DI ; Restore R1 - 09B0 5E 2 POP SI ; Restore R1 - 09B1 1F 3 POP DS ; Restore R1 - 09B2 5D 4 POP BP ; Restore R1 - 09B3 CA 000E RET 14 ; Exit and Clean up Stack - - 09B6 PRINT_STR ENDP - - - ;================================================================ - ;TPRINT_STR (SEG String, MaxLen%, Xpos%, Ypos%, ColorF%, ColorB%) - ;================================================================ - ; - ; Routine to quickly transparently Print a null terminated ASCII - ; string on the active display page up to a maximum length. - ; - ; ENTRY: String = Far Pointer to ASCII string to print - ; MaxLen = # of characters to print if no null found - ; Xpos = X position to draw Text at - ; Ypos = Y position of to draw Text at - ; ColorF = Color to draw text in - ; - ; EXIT: No meaningful values returned - ; - - 0018 TPS_STACK STRUC - 0000 0000 0000 0000 DW ?x4 ; DI, SI, DS, BP - 0000 - 0008 00000000 DD ? ; Caller - 000C 0000 TPS_ColorF DW ? ; Text Color - 000E 0000 TPS_Ypos DW ? ; Y Position to Print at - 0010 0000 TPS_Xpos DW ? ; X position to Print at - 0012 0000 TPS_Len DW ? ; Maximum Length of string to print - 0014 0000 0000 TPS_Text DW ?,? ; Far Ptr to Text String - TPS_STACK ENDS - - PUBLIC TPRINT_STR - - 09B6 TPRINT_STR PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - 09B6 55 1 PUSH BP ; Save R1 - 09B7 1E 2 PUSH DS ; Save R1 - 09B8 56 3 PUSH SI ; Save R1 - 09B9 57 4 PUSH DI ; Save R1 - 09BA 8B EC MOV BP, SP ; Set up Stack Frame - - 09BC @TPS_Print_It: - - 09BC 8B 4E 12 MOV CX, [BP].TPS_Len ; Get Remaining text Length - 09BF E3 2B JCXZ @TPS_Exit ; Exit when out of text - - 09C1 C4 7E 14 LES DI, d [BP].TPS_Text ; ES:DI -> Current Char in Text - 09C4 26: 8A 05 MOV AL, ES:[DI] ; AL = Text Character - 09C7 25 00FF AND AX, 00FFh ; Clear High Word - 09CA 74 20 JZ @TPS_Exit ; Exit if null character - - 09CC FF 4E 12 DEC [BP].TPS_Len ; Remaining Text length-- - 09CF FF 46 14 INC [BP].TPS_Text ; Point to Next text char - - ; Set up Call to TGPRINTC - - 09D2 50 PUSH AX ; Set Character Parameter - 09D3 8B 5E 10 MOV BX, [BP].TPS_Xpos ; Get Xpos - 09D6 53 PUSH BX ; Set Xpos Parameter - 09D7 83 C3 08 ADD BX, 8 ; Advance 1 Char to Right - 09DA 89 5E 10 MOV [BP].TPS_Xpos, BX ; Save for next time through - - 09DD 8B 5E 0E MOV BX, [BP].TPS_Ypos ; Get Ypos - 09E0 53 PUSH BX ; Set Ypos Parameter - - 09E1 8B 5E 0C MOV BX, [BP].TPS_ColorF ; Get Text Color - 09E4 53 PUSH BX ; Set ColorF Parameter - - 09E5 9A ---- 08A1 R CALL f TGPRINTC ; Print Character! - 09EA EB D0 JMP s @TPS_Print_It ; Process next character - - 09EC @TPS_Exit: - POPx DI, SI, DS, BP ; Restore Saved Registers - 09EC 5F 1 POP DI ; Restore R1 - 09ED 5E 2 POP SI ; Restore R1 - 09EE 1F 3 POP DS ; Restore R1 - 09EF 5D 4 POP BP ; Restore R1 - 09F0 CA 000C RET 12 ; Exit and Clean up Stack - - 09F3 TPRINT_STR ENDP - - - ;=========================================== - ;SET_DISPLAY_FONT(SEG FontData, FontNumber%) - ;=========================================== - ; - ; Allows the user to specify their own font data for - ; wither the lower or upper 128 characters. - ; - ; ENTRY: FontData = Far Pointer to Font Bitmaps - ; FontNumber = Which half of set this is - ; = 0, Lower 128 characters - ; = 1, Upper 128 characters - ; - ; EXIT: No meaningful values returned - ; - - 000C SDF_STACK STRUC - 0000 0000 DW ? ; BP - 0002 00000000 DD ? ; Caller - 0006 0000 SDF_Which DW ? ; Hi Table/Low Table Flag - 0008 00000000 SDF_Font DD ? ; Far Ptr to Font Table - SDF_STACK ENDS - - PUBLIC SET_DISPLAY_FONT - - 09F3 SET_DISPLAY_FONT PROC FAR - - 09F3 55 PUSH BP ; Preserve Registers - 09F4 8B EC MOV BP, SP ; Set up Stack Frame - - 09F6 C4 7E 08 LES DI, [BP].SDF_Font ; Get Far Ptr to Font - - 09F9 BE 0022 R MOV SI, o CHARSET_LOW ; Assume Lower 128 chars - 09FC F7 46 06 0001 TEST [BP].SDF_Which, 1 ; Font #1 selected? - 0A01 74 03 JZ @SDF_Set_Font ; If not, skip ahead - - 0A03 BE 0026 R MOV SI, o CHARSET_HI ; Ah, really it's 128-255 - - 0A06 @SDF_Set_Font: - 0A06 89 3C MOV [SI], DI ; Set Font Pointer Offset - 0A08 8C 44 02 MOV [SI+2], ES ; Set Font Pointer Segment - - 0A0B 5D POP BP ; Restore Registers - 0A0C CA 0006 RET 6 ; We are Done.. Outa here - - 0A0F SET_DISPLAY_FONT ENDP - - - ; ===== BITMAP (SPRITE) DISPLAY ROUTINES ===== - - ;====================================================== - ;DRAW_BITMAP (SEG Image, Xpos%, Ypos%, Width%, Height%) - ;====================================================== - ; - ; Draws a variable sized Graphics Bitmap such as a - ; picture or an Icon on the current Display Page in - ; Mode X. The Bitmap is stored in a linear byte array - ; corresponding to (0,0) (1,0), (2,0) .. (Width, Height) - Microsoft (R) Macro Assembler Version 6.11 07/02/14 15:18:33 -modex.asm Page 12 - 1 - - - ; This is the same linear manner as mode 13h graphics. - ; - ; ENTRY: Image = Far Pointer to Bitmap Data - ; Xpos = X position to Place Upper Left pixel at - ; Ypos = Y position to Place Upper Left pixel at - ; Width = Width of the Bitmap in Pixels - ; Height = Height of the Bitmap in Pixels - ; - ; EXIT: No meaningful values returned - ; - - 0022 DB_STACK STRUC - 0000 0000 DB_LineO DW ? ; Offset to Next Line - 0002 0000 DB_PixCount DW ? ; (Minimum) # of Pixels/Line - 0004 0000 DB_Start DW ? ; Addr of Upper Left Pixel - 0006 0000 DB_PixSkew DW ? ; # of bytes to Adjust EOL - 0008 0000 DB_SkewFlag DW ? ; Extra Pix on Plane Flag - 000A 0000 0000 0000 DW ?x4 ; DI, SI, DS, BP - 0000 - 0012 00000000 DD ? ; Caller - 0016 0000 DB_Height DW ? ; Height of Bitmap in Pixels - 0018 0000 DB_Width DW ? ; Width of Bitmap in Pixels - 001A 0000 DB_Ypos DW ? ; Y position to Draw Bitmap at - 001C 0000 DB_Xpos DW ? ; X position to Draw Bitmap at - 001E 00000000 DB_Image DD ? ; Far Pointer to Graphics Bitmap - DB_STACK ENDS - - PUBLIC DRAW_BITMAP - - 0A0F DRAW_BITMAP PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - 0A0F 55 1 PUSH BP ; Save R1 - 0A10 1E 2 PUSH DS ; Save R1 - 0A11 56 3 PUSH SI ; Save R1 - 0A12 57 4 PUSH DI ; Save R1 - 0A13 83 EC 0A SUB SP, 10 ; Allocate workspace - 0A16 8B EC MOV BP, SP ; Set up Stack Frame - - 0A18 C4 3E 0014 R LES DI, d CURRENT_PAGE ; Point to Active VGA Page - 0A1C FC CLD ; Direction Flag = Forward - - 0A1D 8B 46 1A MOV AX, [BP].DB_Ypos ; Get UL Corner Ypos - 0A20 F7 26 0000 R MUL SCREEN_WIDTH ; AX = Offset to Line Ypos - - 0A24 8B 5E 1C MOV BX, [BP].DB_Xpos ; Get UL Corner Xpos - 0A27 8A CB MOV CL, BL ; Save Plane # in CL - 0A29 C1 EB 02 SHR BX, 2 ; Xpos/4 = Offset Into Line - - 0A2C 03 F8 ADD DI, AX ; ES:DI -> Start of Line - 0A2E 03 FB ADD DI, BX ; ES:DI -> Upper Left Pixel - 0A30 89 7E 04 MOV [BP].DB_Start, DI ; Save Starting Addr - - ; Compute line to line offset - - 0A33 8B 5E 18 MOV BX, [BP].DB_Width ; Get Width of Image - 0A36 8B D3 MOV DX, BX ; Save Copy in DX - 0A38 C1 EB 02 SHR BX, 2 ; /4 = width in bands - 0A3B A1 0000 R MOV AX, SCREEN_WIDTH ; Get Screen Width - 0A3E 2B C3 SUB AX, BX ; - (Bitmap Width/4) - - 0A40 89 46 00 MOV [BP].DB_LineO, AX ; Save Line Width offset - 0A43 89 5E 02 MOV [BP].DB_PixCount, BX ; Minimum # pix to copy - - 0A46 83 E2 03 AND DX, PLANE_BITS ; Get "partial band" size (0-3) - 0A49 89 56 06 MOV [BP].DB_PixSkew, DX ; Also End of Line Skew - 0A4C 89 56 08 MOV [BP].DB_SkewFlag, DX ; Save as Flag/Count - - 0A4F 83 E1 03 AND CX, PLANE_BITS ; CL = Starting Plane # - 0A52 B8 1102 MOV AX, MAP_MASK_PLANE2 ; Plane Mask & Plane Select - 0A55 D2 E4 SHL AH, CL ; Select correct Plane - OUT_16 SC_Index, AX ; Select Plane... - 0A57 BA 03C4 1 MOV DX, SC_Index ; then Select Register - 0A5A EF 1 OUT DX, AX ; Set I/O Register(s) - 0A5B 8A FC MOV BH, AH ; BH = Saved Plane Mask - 0A5D B3 04 MOV BL, 4 ; BL = Planes to Copy - - 0A5F @DB_COPY_PLANE: - - 0A5F C5 76 1E LDS SI, [BP].DB_Image ; DS:SI-> Source Image - 0A62 8B 56 16 MOV DX, [BP].DB_Height ; # of Lines to Copy - 0A65 8B 7E 04 MOV DI, [BP].DB_Start ; ES:DI-> Dest pos - - 0A68 @DB_COPY_LINE: - 0A68 8B 4E 02 MOV CX, [BP].DB_PixCount ; Min # to copy - - 0A6B F6 C1 FC TEST CL, 0FCh ; 16+PixWide? - 0A6E 74 18 JZ @DB_COPY_REMAINDER ; Nope... - - ; Pixel Copy loop has been unrolled to x4 - - 0A70 @DB_COPY_LOOP: - 0A70 A4 MOVSB ; Copy Bitmap Pixel - 0A71 83 C6 03 ADD SI, 3 ; Skip to Next Byte in same plane - 0A74 A4 MOVSB ; Copy Bitmap Pixel - 0A75 83 C6 03 ADD SI, 3 ; Skip to Next Byte in same plane - 0A78 A4 MOVSB ; Copy Bitmap Pixel - 0A79 83 C6 03 ADD SI, 3 ; Skip to Next Byte in same plane - 0A7C A4 MOVSB ; Copy Bitmap Pixel - 0A7D 83 C6 03 ADD SI, 3 ; Skip to Next Byte in same plane - - 0A80 80 E9 04 SUB CL, 4 ; Pixels to Copy=-4 - 0A83 F6 C1 FC TEST CL, 0FCh ; 4+ Pixels Left? - 0A86 75 E8 JNZ @DB_COPY_LOOP ; if so, do another block - - 0A88 @DB_COPY_REMAINDER: - 0A88 E3 07 JCXZ @DB_NEXT_LINE ; Any Pixels left on line - - 0A8A @DB_COPY2: - 0A8A A4 MOVSB ; Copy Bitmap Pixel - 0A8B 83 C6 03 ADD SI,3 ; Skip to Next Byte in same plane - LOOPx CX, @DB_COPY2 ; Pixels to Copy--, Loop until done - 0A8E 49 1 DEC CX ; Counter-- - 0A8F 75 F9 1 JNZ @DB_COPY2 ; Jump if not 0 - - 0A91 @DB_NEXT_LINE: - - ; any Partial Pixels? (some planes only) - - 0A91 0B 4E 08 OR CX, [BP].DB_SkewFlag ; Get Skew Count - 0A94 74 03 JZ @DB_NEXT2 ; if no partial pixels - - 0A96 A4 MOVSB ; Copy Bitmap Pixel - 0A97 4F DEC DI ; Back up to align - 0A98 4E DEC SI ; Back up to align - - 0A99 @DB_NEXT2: - 0A99 03 76 06 ADD SI, [BP].DB_PixSkew ; Adjust Skew - 0A9C 03 7E 00 ADD DI, [BP].DB_LineO ; Set to Next Display Line - LOOPx DX, @DB_COPY_LINE ; Lines to Copy--, Loop if more - 0A9F 4A 1 DEC DX ; Counter-- - 0AA0 75 C6 1 JNZ @DB_COPY_LINE ; Jump if not 0 - - ; Copy Next Plane.... - - 0AA2 FE CB DEC BL ; Planes to Go-- - 0AA4 74 1B JZ @DB_Exit ; Hey! We are done - - 0AA6 D0 C7 ROL BH, 1 ; Next Plane in line... - OUT_8 SC_Data, BH ; Select Plane - 0AA8 BA 03C5 1 MOV DX, SC_Data ; then Select Register - 0AAB 8A C7 1 MOV AL, BH ; then Get Data Value - 0AAD EE 1 OUT DX, AL ; Set I/O Register - - 0AAE 3C 12 CMP AL, 12h ; Carry Set if AL=11h - 0AB0 83 56 04 00 ADC [BP].DB_Start, 0 ; Screen Addr =+Carry - 0AB4 FF 46 1E INC w [BP].DB_Image ; Start @ Next Byte - - 0AB7 83 6E 08 01 SUB [BP].DB_SkewFlag, 1 ; Reduce Planes to Skew - 0ABB 83 56 08 00 ADC [BP].DB_SkewFlag, 0 ; Back to 0 if it was -1 - - 0ABF EB 9E JMP s @DB_COPY_PLANE ; Go Copy the Next Plane - - 0AC1 @DB_Exit: - 0AC1 83 C4 0A ADD SP, 10 ; Deallocate workspace - POPx DI, SI, DS, BP ; Restore Saved Registers - 0AC4 5F 1 POP DI ; Restore R1 - 0AC5 5E 2 POP SI ; Restore R1 - 0AC6 1F 3 POP DS ; Restore R1 - 0AC7 5D 4 POP BP ; Restore R1 - 0AC8 CA 000C RET 12 ; Exit and Clean up Stack - - 0ACB DRAW_BITMAP ENDP - - - ;======================================================= - ;TDRAW_BITMAP (SEG Image, Xpos%, Ypos%, Width%, Height%) - ;======================================================= - ; - ; Transparently Draws a variable sized Graphics Bitmap - ; such as a picture or an Icon on the current Display Page - ; in Mode X. Pixels with a value of 0 are not drawn, - ; leaving the previous "background" contents intact. - ; - ; The Bitmap format is the same as for the DRAW_BITMAP function. - ; - ; ENTRY: Image = Far Pointer to Bitmap Data - ; Xpos = X position to Place Upper Left pixel at - ; Ypos = Y position to Place Upper Left pixel at - ; Width = Width of the Bitmap in Pixels - ; Height = Height of the Bitmap in Pixels - ; - ; EXIT: No meaningful values returned - ; - - 0022 TB_STACK STRUC - 0000 0000 TB_LineO DW ? ; Offset to Next Line - 0002 0000 TB_PixCount DW ? ; (Minimum) # of Pixels/Line - 0004 0000 TB_Start DW ? ; Addr of Upper Left Pixel - 0006 0000 TB_PixSkew DW ? ; # of bytes to Adjust EOL - 0008 0000 TB_SkewFlag DW ? ; Extra Pix on Plane Flag - 000A 0000 0000 0000 DW ?x4 ; DI, SI, DS, BP - 0000 - 0012 00000000 DD ? ; Caller - 0016 0000 TB_Height DW ? ; Height of Bitmap in Pixels - 0018 0000 TB_Width DW ? ; Width of Bitmap in Pixels - 001A 0000 TB_Ypos DW ? ; Y position to Draw Bitmap at - 001C 0000 TB_Xpos DW ? ; X position to Draw Bitmap at - 001E 00000000 TB_Image DD ? ; Far Pointer to Graphics Bitmap - TB_STACK ENDS - - PUBLIC TDRAW_BITMAP - - 0ACB TDRAW_BITMAP PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - 0ACB 55 1 PUSH BP ; Save R1 - 0ACC 1E 2 PUSH DS ; Save R1 - 0ACD 56 3 PUSH SI ; Save R1 - 0ACE 57 4 PUSH DI ; Save R1 - 0ACF 83 EC 0A SUB SP, 10 ; Allocate workspace - 0AD2 8B EC MOV BP, SP ; Set up Stack Frame - - 0AD4 C4 3E 0014 R LES DI, d CURRENT_PAGE ; Point to Active VGA Page - 0AD8 FC CLD ; Direction Flag = Forward - - 0AD9 8B 46 1A MOV AX, [BP].TB_Ypos ; Get UL Corner Ypos - 0ADC F7 26 0000 R MUL SCREEN_WIDTH ; AX = Offset to Line Ypos - - 0AE0 8B 5E 1C MOV BX, [BP].TB_Xpos ; Get UL Corner Xpos - 0AE3 8A CB MOV CL, BL ; Save Plane # in CL - 0AE5 C1 EB 02 SHR BX, 2 ; Xpos/4 = Offset Into Line - - 0AE8 03 F8 ADD DI, AX ; ES:DI -> Start of Line - 0AEA 03 FB ADD DI, BX ; ES:DI -> Upper Left Pixel - 0AEC 89 7E 04 MOV [BP].TB_Start, DI ; Save Starting Addr - - ; Compute line to line offset - - 0AEF 8B 5E 18 MOV BX, [BP].TB_Width ; Get Width of Image - 0AF2 8B D3 MOV DX, BX ; Save Copy in DX - 0AF4 C1 EB 02 SHR BX, 2 ; /4 = width in bands - 0AF7 A1 0000 R MOV AX, SCREEN_WIDTH ; Get Screen Width - 0AFA 2B C3 SUB AX, BX ; - (Bitmap Width/4) - - 0AFC 89 46 00 MOV [BP].TB_LineO, AX ; Save Line Width offset - 0AFF 89 5E 02 MOV [BP].TB_PixCount, BX ; Minimum # pix to copy - - 0B02 83 E2 03 AND DX, PLANE_BITS ; Get "partial band" size (0-3) - 0B05 89 56 06 MOV [BP].TB_PixSkew, DX ; Also End of Line Skew - 0B08 89 56 08 MOV [BP].TB_SkewFlag, DX ; Save as Flag/Count - - 0B0B 83 E1 03 AND CX, PLANE_BITS ; CL = Starting Plane # - 0B0E B8 1102 MOV AX, MAP_MASK_PLANE2 ; Plane Mask & Plane Select - 0B11 D2 E4 SHL AH, CL ; Select correct Plane - OUT_16 SC_Index, AX ; Select Plane... - 0B13 BA 03C4 1 MOV DX, SC_Index ; then Select Register - 0B16 EF 1 OUT DX, AX ; Set I/O Register(s) - 0B17 8A FC MOV BH, AH ; BH = Saved Plane Mask - 0B19 B3 04 MOV BL, 4 ; BL = Planes to Copy - - Microsoft (R) Macro Assembler Version 6.11 07/02/14 15:18:33 -modex.asm Page 13 - 1 - - - 0B1B @TB_COPY_PLANE: - - 0B1B C5 76 1E LDS SI, [BP].TB_Image ; DS:SI-> Source Image - 0B1E 8B 56 16 MOV DX, [BP].TB_Height ; # of Lines to Copy - 0B21 8B 7E 04 MOV DI, [BP].TB_Start ; ES:DI-> Dest pos - - ; Here AH is set with the value to be considered - ; "Transparent". It can be changed! - - 0B24 B4 00 MOV AH, 0 ; Value to Detect 0 - - 0B26 @TB_COPY_LINE: - 0B26 8B 4E 02 MOV CX, [BP].TB_PixCount ; Min # to copy - - 0B29 F6 C1 FC TEST CL, 0FCh ; 16+PixWide? - 0B2C 74 3A JZ @TB_COPY_REMAINDER ; Nope... - - ; Pixel Copy loop has been unrolled to x4 - - 0B2E @TB_COPY_LOOP: - 0B2E AC LODSB ; Get Pixel Value in AL - 0B2F 83 C6 03 ADD SI, 3 ; Skip to Next Byte in same plane - 0B32 38 E0 CMP AL, AH ; It is "Transparent"? - 0B34 74 03 JE @TB_SKIP_01 ; Skip ahead if so - 0B36 26: 88 05 MOV ES:[DI], AL ; Copy Pixel to VGA screen - - 0B39 @TB_SKIP_01: - 0B39 AC LODSB ; Get Pixel Value in AL - 0B3A 83 C6 03 ADD SI, 3 ; Skip to Next Byte in same plane - 0B3D 38 E0 CMP AL, AH ; It is "Transparent"? - 0B3F 74 04 JE @TB_SKIP_02 ; Skip ahead if so - 0B41 26: 88 45 01 MOV ES:[DI+1], AL ; Copy Pixel to VGA screen - - 0B45 @TB_SKIP_02: - 0B45 AC LODSB ; Get Pixel Value in AL - 0B46 83 C6 03 ADD SI, 3 ; Skip to Next Byte in same plane - 0B49 38 E0 CMP AL, AH ; It is "Transparent"? - 0B4B 74 04 JE @TB_SKIP_03 ; Skip ahead if so - 0B4D 26: 88 45 02 MOV ES:[DI+2], AL ; Copy Pixel to VGA screen - - 0B51 @TB_SKIP_03: - 0B51 AC LODSB ; Get Pixel Value in AL - 0B52 83 C6 03 ADD SI, 3 ; Skip to Next Byte in same plane - 0B55 38 E0 CMP AL, AH ; It is "Transparent"? - 0B57 74 04 JE @TB_SKIP_04 ; Skip ahead if so - 0B59 26: 88 45 03 MOV ES:[DI+3], AL ; Copy Pixel to VGA screen - - 0B5D @TB_SKIP_04: - 0B5D 83 C7 04 ADD DI, 4 ; Adjust Pixel Write Location - 0B60 80 E9 04 SUB CL, 4 ; Pixels to Copy=-4 - 0B63 F6 C1 FC TEST CL, 0FCh ; 4+ Pixels Left? - 0B66 75 C6 JNZ @TB_COPY_LOOP ; if so, do another block - - 0B68 @TB_COPY_REMAINDER: - 0B68 E3 0F JCXZ @TB_NEXT_LINE ; Any Pixels left on line - - 0B6A @TB_COPY2: - 0B6A AC LODSB ; Get Pixel Value in AL - 0B6B 83 C6 03 ADD SI, 3 ; Skip to Next Byte in same plane - 0B6E 38 E0 CMP AL, AH ; It is "Transparent"? - 0B70 74 03 JE @TB_SKIP_05 ; Skip ahead if so - 0B72 26: 88 05 MOV ES:[DI], AL ; Copy Pixel to VGA screen - - 0B75 @TB_SKIP_05: - 0B75 47 INC DI ; Advance Dest Addr - LOOPx CX, @TB_COPY2 ; Pixels to Copy--, Loop until done - 0B76 49 1 DEC CX ; Counter-- - 0B77 75 F1 1 JNZ @TB_COPY2 ; Jump if not 0 - - 0B79 @TB_NEXT_LINE: - - ; any Partial Pixels? (some planes only) - - 0B79 0B 4E 08 OR CX, [BP].TB_SkewFlag ; Get Skew Count - 0B7C 74 09 JZ @TB_NEXT2 ; if no partial pixels - - 0B7E AC LODSB ; Get Pixel Value in AL - 0B7F 4E DEC SI ; Backup to Align - 0B80 38 E0 CMP AL, AH ; It is "Transparent"? - 0B82 74 03 JE @TB_NEXT2 ; Skip ahead if so - 0B84 26: 88 05 MOV ES:[DI], AL ; Copy Pixel to VGA screen - - 0B87 @TB_NEXT2: - 0B87 03 76 06 ADD SI, [BP].TB_PixSkew ; Adjust Skew - 0B8A 03 7E 00 ADD DI, [BP].TB_LineO ; Set to Next Display Line - LOOPx DX, @TB_COPY_LINE ; Lines to Copy--, Loop if More - 0B8D 4A 1 DEC DX ; Counter-- - 0B8E 75 96 1 JNZ @TB_COPY_LINE ; Jump if not 0 - - ;Copy Next Plane.... - - 0B90 FE CB DEC BL ; Planes to Go-- - 0B92 74 1C JZ @TB_Exit ; Hey! We are done - - 0B94 D0 C7 ROL BH, 1 ; Next Plane in line... - OUT_8 SC_Data, BH ; Select Plane - 0B96 BA 03C5 1 MOV DX, SC_Data ; then Select Register - 0B99 8A C7 1 MOV AL, BH ; then Get Data Value - 0B9B EE 1 OUT DX, AL ; Set I/O Register - - 0B9C 3C 12 CMP AL, 12h ; Carry Set if AL=11h - 0B9E 83 56 04 00 ADC [BP].TB_Start, 0 ; Screen Addr =+Carry - 0BA2 FF 46 1E INC w [BP].TB_Image ; Start @ Next Byte - - 0BA5 83 6E 08 01 SUB [BP].TB_SkewFlag, 1 ; Reduce Planes to Skew - 0BA9 83 56 08 00 ADC [BP].TB_SkewFlag, 0 ; Back to 0 if it was -1 - - 0BAD E9 FF6B JMP @TB_COPY_PLANE ; Go Copy the next Plane - - 0BB0 @TB_Exit: - 0BB0 83 C4 0A ADD SP, 10 ; Deallocate workspace - POPx DI, SI, DS, BP ; Restore Saved Registers - 0BB3 5F 1 POP DI ; Restore R1 - 0BB4 5E 2 POP SI ; Restore R1 - 0BB5 1F 3 POP DS ; Restore R1 - 0BB6 5D 4 POP BP ; Restore R1 - 0BB7 CA 000C RET 12 ; Exit and Clean up Stack - - 0BBA TDRAW_BITMAP ENDP - - - ; ==== VIDEO MEMORY to VIDEO MEMORY COPY ROUTINES ===== - - ;================================== - ;COPY_PAGE (SourcePage%, DestPage%) - ;================================== - ; - ; Duplicate on display page onto another - ; - ; ENTRY: SourcePage = Display Page # to Duplicate - ; DestPage = Display Page # to hold copy - ; - ; EXIT: No meaningful values returned - ; - - 0010 CP_STACK STRUC - 0000 0000 0000 0000 DW ?x4 ; DI, SI, DS, BP - 0000 - 0008 00000000 DD ? ; Caller - 000C 0000 CP_DestP DW ? ; Page to hold copied image - 000E 0000 CP_SourceP DW ? ; Page to Make copy from - CP_STACK ENDS - - PUBLIC COPY_PAGE - - 0BBA COPY_PAGE PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - 0BBA 55 1 PUSH BP ; Save R1 - 0BBB 1E 2 PUSH DS ; Save R1 - 0BBC 56 3 PUSH SI ; Save R1 - 0BBD 57 4 PUSH DI ; Save R1 - 0BBE 8B EC MOV BP, SP ; Set up Stack Frame - 0BC0 FC CLD ; Block Xfer Forwards - - ; Make sure Page #'s are valid - - 0BC1 8B 46 0E MOV AX, [BP].CP_SourceP ; Get Source Page # - 0BC4 3B 06 0004 R CMP AX, LAST_PAGE ; is it > Max Page #? - 0BC8 73 3D JAE @CP_Exit ; if so, abort - - 0BCA 8B 5E 0C MOV BX, [BP].CP_DestP ; Get Destination Page # - 0BCD 3B 1E 0004 R CMP BX, LAST_PAGE ; is it > Max Page #? - 0BD1 73 34 JAE @CP_Exit ; if so, abort - - 0BD3 3B C3 CMP AX, BX ; Pages #'s the same? - 0BD5 74 30 JE @CP_Exit ; if so, abort - - ; Setup DS:SI and ES:DI to Video Pages - - 0BD7 D1 E3 SHL BX, 1 ; Scale index to Word - 0BD9 8B BF 0006 R MOV DI, PAGE_ADDR[BX] ; Offset to Dest Page - - 0BDD 8B D8 MOV BX, AX ; Index to Source page - 0BDF D1 E3 SHL BX, 1 ; Scale index to Word - 0BE1 8B B7 0006 R MOV SI, PAGE_ADDR[BX] ; Offset to Source Page - - 0BE5 8B 0E 000E R MOV CX, PAGE_SIZE ; Get size of Page - 0BE9 A1 0016 R MOV AX, CURRENT_SEGMENT ; Get Video Mem Segment - 0BEC 8E C0 MOV ES, AX ; ES:DI -> Dest Page - 0BEE 8E D8 MOV DS, AX ; DS:SI -> Source Page - - ; Setup VGA registers for Mem to Mem copy - - OUT_16 GC_Index, LATCHES_ON ; Data from Latches = on - 0BF0 BA 03CE 1 MOV DX, GC_Index ; then Select Register - 0BF3 B8 0008 1 MOV AX, LATCHES_ON ; then Get Data Value - 0BF6 EF 1 OUT DX, AX ; Set I/O Register(s) - OUT_16 SC_Index, ALL_PLANES_ON ; Copy all Planes - 0BF7 BA 03C4 1 MOV DX, SC_Index ; then Select Register - 0BFA B8 0F02 1 MOV AX, ALL_PLANES_ON ; then Get Data Value - 0BFD EF 1 OUT DX, AX ; Set I/O Register(s) - - ; Note.. Do *NOT* use MOVSW or MOVSD - they will - ; Screw with the latches which are 8 bits x 4 - - 0BFE F3/ A4 REP MOVSB ; Copy entire Page! - - ; Reset VGA for normal memory access - - OUT_16 GC_Index, LATCHES_OFF ; Data from Latches = off - 0C00 BA 03CE 1 MOV DX, GC_Index ; then Select Register - 0C03 B8 FF08 1 MOV AX, LATCHES_OFF ; then Get Data Value - 0C06 EF 1 OUT DX, AX ; Set I/O Register(s) - - 0C07 @CP_Exit: - POPx DI, SI, DS, BP ; Restore Saved Registers - 0C07 5F 1 POP DI ; Restore R1 - 0C08 5E 2 POP SI ; Restore R1 - 0C09 1F 3 POP DS ; Restore R1 - 0C0A 5D 4 POP BP ; Restore R1 - 0C0B CA 0004 RET 4 ; Exit and Clean up Stack - - 0C0E COPY_PAGE ENDP - - - ;========================================================================== - ;COPY_BITMAP (SourcePage%, X1%, Y1%, X2%, Y2%, DestPage%, DestX1%, DestY1%) - ;========================================================================== - ; - ; Copies a Bitmap Image from one Display Page to Another - ; This Routine is Limited to copying Images with the same - ; Plane Alignment. To Work: (X1 MOD 4) must = (DestX1 MOD 4) - ; Copying an Image to the Same Page is supported, but results - ; may be defined when the when the rectangular areas - ; (X1, Y1) - (X2, Y2) and (DestX1, DestY1) - - ; (DestX1+(X2-X1), DestY1+(Y2-Y1)) overlap... - ; No Paramter checking to done to insure that - ; X2 >= X1 and Y2 >= Y1. Be Careful... - ; - ; ENTRY: SourcePage = Display Page # with Source Image - ; X1 = Upper Left Xpos of Source Image - ; Y1 = Upper Left Ypos of Source Image - ; X2 = Lower Right Xpos of Source Image - ; Y2 = Lower Right Ypos of Source Image - ; DestPage = Display Page # to copy Image to - ; DestX1 = Xpos to Copy UL Corner of Image to - ; DestY1 = Ypos to Copy UL Corner of Image to - ; - ; EXIT: AX = Success Flag: 0 = Failure / -1= Success - ; - - 0020 CB_STACK STRUC - 0000 0000 CB_Height DW ? ; Height of Image in Lines - 0002 0000 CB_Width DW ? ; Width of Image in "bands" - 0004 0000 0000 0000 DW ?x4 ; DI, SI, DS, BP - 0000 - 000C 00000000 DD ? ; Caller - 0010 0000 CB_DestY1 DW ? ; Destination Ypos - 0012 0000 CB_DestX1 DW ? ; Destination Xpos - 0014 0000 CB_DestP DW ? ; Page to Copy Bitmap To - Microsoft (R) Macro Assembler Version 6.11 07/02/14 15:18:33 -modex.asm Page 14 - 1 - - - 0016 0000 CB_Y2 DW ? ; LR Ypos of Image - 0018 0000 CB_X2 DW ? ; LR Xpos of Image - 001A 0000 CB_Y1 DW ? ; UL Ypos of Image - 001C 0000 CB_X1 DW ? ; UL Xpos of Image - 001E 0000 CB_SourceP DW ? ; Page containing Source Bitmap - CB_STACK ENDS - - PUBLIC COPY_BITMAP - - 0C0E COPY_BITMAP PROC FAR - - PUSHx BP, DS, SI, DI ; Preserve Important Registers - 0C0E 55 1 PUSH BP ; Save R1 - 0C0F 1E 2 PUSH DS ; Save R1 - 0C10 56 3 PUSH SI ; Save R1 - 0C11 57 4 PUSH DI ; Save R1 - 0C12 83 EC 04 SUB SP, 4 ; Allocate WorkSpace on Stack - 0C15 8B EC MOV BP, SP ; Set up Stack Frame - - ; Prep Registers (and keep jumps short!) - - 0C17 8E 06 0016 R MOV ES, CURRENT_SEGMENT ; ES -> VGA Ram - 0C1B FC CLD ; Block Xfer Forwards - - ; Make sure Parameters are valid - - 0C1C 8B 5E 1E MOV BX, [BP].CB_SourceP ; Get Source Page # - 0C1F 3B 1E 0004 R CMP BX, LAST_PAGE ; is it > Max Page #? - 0C23 73 7D JAE @CB_Abort ; if so, abort - - 0C25 8B 4E 14 MOV CX, [BP].CB_DestP ; Get Destination Page # - 0C28 3B 0E 0004 R CMP CX, LAST_PAGE ; is it > Max Page #? - 0C2C 73 74 JAE @CB_Abort ; if so, abort - - 0C2E 8B 46 1C MOV AX, [BP].CB_X1 ; Get Source X1 - 0C31 33 46 12 XOR AX, [BP].CB_DestX1 ; Compare Bits 0-1 - 0C34 83 E0 03 AND AX, PLANE_BITS ; Check Plane Bits - 0C37 75 69 JNZ @CB_Abort ; They should cancel out - - ; Setup for Copy processing - - OUT_8 SC_INDEX, MAP_MASK ; Set up for Plane Select - 0C39 BA 03C4 1 MOV DX, SC_INDEX ; then Select Register - 0C3C B0 02 1 MOV AL, MAP_MASK ; then Get Data Value - 0C3E EE 1 OUT DX, AL ; Set I/O Register - OUT_16 GC_Index, LATCHES_ON ; Data from Latches = on - 0C3F BA 03CE 1 MOV DX, GC_Index ; then Select Register - 0C42 B8 0008 1 MOV AX, LATCHES_ON ; then Get Data Value - 0C45 EF 1 OUT DX, AX ; Set I/O Register(s) - - ; Compute Info About Images, Setup ES:SI & ES:DI - - 0C46 8B 46 16 MOV AX, [BP].CB_Y2 ; Height of Bitmap in lines - 0C49 2B 46 1A SUB AX, [BP].CB_Y1 ; is Y2 - Y1 + 1 - 0C4C 40 INC AX ; (add 1 since were not 0 based) - 0C4D 89 46 00 MOV [BP].CB_Height, AX ; Save on Stack for later use - - 0C50 8B 46 18 MOV AX, [BP].CB_X2 ; Get # of "Bands" of 4 Pixels - 0C53 8B 56 1C MOV DX, [BP].CB_X1 ; the Bitmap Occupies as X2-X1 - 0C56 C1 E8 02 SHR AX, 2 ; Get X2 Band (X2 / 4) - 0C59 C1 EA 02 SHR DX, 2 ; Get X1 Band (X1 / 4) - 0C5C 2B C2 SUB AX, DX ; AX = # of Bands - 1 - 0C5E 40 INC AX ; AX = # of Bands - 0C5F 89 46 02 MOV [BP].CB_Width, AX ; Save on Stack for later use - - 0C62 D1 E3 SHL BX, 1 ; Scale Source Page to Word - 0C64 8B B7 0006 R MOV SI, PAGE_ADDR[BX] ; SI = Offset of Source Page - 0C68 8B 46 1A MOV AX, [BP].CB_Y1 ; Get Source Y1 Line - 0C6B F7 26 0000 R MUL SCREEN_WIDTH ; AX = Offset to Line Y1 - 0C6F 03 F0 ADD SI, AX ; SI = Offset to Line Y1 - 0C71 8B 46 1C MOV AX, [BP].CB_X1 ; Get Source X1 - 0C74 C1 E8 02 SHR AX, 2 ; X1 / 4 = Byte offset - 0C77 03 F0 ADD SI, AX ; SI = Byte Offset to (X1,Y1) - - 0C79 8B D9 MOV BX, CX ; Dest Page Index to BX - 0C7B D1 E3 SHL BX, 1 ; Scale Source Page to Word - 0C7D 8B BF 0006 R MOV DI, PAGE_ADDR[BX] ; DI = Offset of Dest Page - 0C81 8B 46 10 MOV AX, [BP].CB_DestY1 ; Get Dest Y1 Line - 0C84 F7 26 0000 R MUL SCREEN_WIDTH ; AX = Offset to Line Y1 - 0C88 03 F8 ADD DI, AX ; DI = Offset to Line Y1 - 0C8A 8B 46 12 MOV AX, [BP].CB_DestX1 ; Get Dest X1 - 0C8D C1 E8 02 SHR AX, 2 ; X1 / 4 = Byte offset - 0C90 03 F8 ADD DI, AX ; DI = Byte Offset to (D-X1,D-Y1) - - 0C92 8B 4E 02 MOV CX, [BP].CB_Width ; CX = Width of Image (Bands) - 0C95 49 DEC CX ; CX = 1? - 0C96 74 0F JE @CB_Only_One_Band ; 0 Means Image Width of 1 Band - - 0C98 8B 5E 1C MOV BX, [BP].CB_X1 ; Get Source X1 - 0C9B 83 E3 03 AND BX, PLANE_BITS ; Aligned? (bits 0-1 = 00?) - 0C9E 74 70 JZ @CB_Check_Right ; if so, check right alignment - 0CA0 75 41 JNZ @CB_Left_Band ; not aligned? well.. - - 0CA2 @CB_Abort: - CLR AX ; Return False (Failure) - 0CA2 33 C0 1 XOR AX, AX ; Set Register = 0 - 0CA4 E9 00D7 JMP @CB_Exit ; and Finish Up - - ; Copy when Left & Right Clip Masks overlap... - - 0CA7 @CB_Only_One_Band: - 0CA7 8B 5E 1C MOV BX, [BP].CB_X1 ; Get Left Clip Mask - 0CAA 83 E3 03 AND BX, PLANE_BITS ; Mask out Row # - 0CAD 2E: 8A 87 0000 R MOV AL, Left_Clip_Mask[BX] ; Get Left Edge Mask - 0CB2 8B 5E 18 MOV BX, [BP].CB_X2 ; Get Right Clip Mask - 0CB5 83 E3 03 AND BX, PLANE_BITS ; Mask out Row # - 0CB8 2E: 22 87 0004 R AND AL, Right_Clip_Mask[BX] ; Get Right Edge Mask byte - - OUT_8 SC_Data, AL ; Clip For Left & Right Masks - 0CBD BA 03C5 1 MOV DX, SC_Data ; then Select Register - 0CC0 EE 1 OUT DX, AL ; Set I/O Register - - 0CC1 8B 4E 00 MOV CX, [BP].CB_Height ; CX = # of Lines to Copy - 0CC4 8B 16 0000 R MOV DX, SCREEN_WIDTH ; DX = Width of Screen - CLR BX ; BX = Offset into Image - 0CC8 33 DB 1 XOR BX, BX ; Set Register = 0 - - 0CCA @CB_One_Loop: - 0CCA 26: 8A 00 MOV AL, ES:[SI+BX] ; Load Latches - 0CCD 26: 88 01 MOV ES:[DI+BX], AL ; Unload Latches - 0CD0 03 DA ADD BX, DX ; Advance Offset to Next Line - LOOPjz CX, @CB_One_Done ; Exit Loop if Finished - 0CD2 49 1 DEC CX ; Counter-- - 0CD3 74 0B 1 JZ @CB_One_Done ; Jump if 0 - - 0CD5 26: 8A 00 MOV AL, ES:[SI+BX] ; Load Latches - 0CD8 26: 88 01 MOV ES:[DI+BX], AL ; Unload Latches - 0CDB 03 DA ADD BX, DX ; Advance Offset to Next Line - LOOPx CX, @CB_One_Loop ; Loop until Finished - 0CDD 49 1 DEC CX ; Counter-- - 0CDE 75 EA 1 JNZ @CB_One_Loop ; Jump if not 0 - - 0CE0 @CB_One_Done: - 0CE0 E9 0094 JMP @CB_Finish ; Outa Here! - - ; Copy Left Edge of Bitmap - - 0CE3 @CB_Left_Band: - - OUT_8 SC_Data, Left_Clip_Mask[BX] ; Set Left Edge Plane Mask - 0CE3 BA 03C5 1 MOV DX, SC_Data ; then Select Register - 0CE6 2E: 8A 87 0000 R 1 MOV AL, Left_Clip_Mask[BX] ; then Get Data Value - 0CEB EE 1 OUT DX, AL ; Set I/O Register - - 0CEC 8B 4E 00 MOV CX, [BP].CB_Height ; CX = # of Lines to Copy - 0CEF 8B 16 0000 R MOV DX, SCREEN_WIDTH ; DX = Width of Screen - CLR BX ; BX = Offset into Image - 0CF3 33 DB 1 XOR BX, BX ; Set Register = 0 - - 0CF5 @CB_Left_Loop: - 0CF5 26: 8A 00 MOV AL, ES:[SI+BX] ; Load Latches - 0CF8 26: 88 01 MOV ES:[DI+BX], AL ; Unload Latches - 0CFB 03 DA ADD BX, DX ; Advance Offset to Next Line - LOOPjz CX, @CB_Left_Done ; Exit Loop if Finished - 0CFD 49 1 DEC CX ; Counter-- - 0CFE 74 0B 1 JZ @CB_Left_Done ; Jump if 0 - - 0D00 26: 8A 00 MOV AL, ES:[SI+BX] ; Load Latches - 0D03 26: 88 01 MOV ES:[DI+BX], AL ; Unload Latches - 0D06 03 DA ADD BX, DX ; Advance Offset to Next Line - LOOPx CX, @CB_Left_Loop ; Loop until Finished - 0D08 49 1 DEC CX ; Counter-- - 0D09 75 EA 1 JNZ @CB_Left_Loop ; Jump if not 0 - - 0D0B @CB_Left_Done: - 0D0B 47 INC DI ; Move Dest Over 1 band - 0D0C 46 INC SI ; Move Source Over 1 band - 0D0D FF 4E 02 DEC [BP].CB_Width ; Band Width-- - - ; Determine if Right Edge of Bitmap needs special copy - - 0D10 @CB_Check_Right: - 0D10 8B 5E 18 MOV BX, [BP].CB_X2 ; Get Source X2 - 0D13 83 E3 03 AND BX, PLANE_BITS ; Aligned? (bits 0-1 = 11?) - 0D16 80 FB 03 CMP BL, 03h ; Plane = 3? - 0D19 74 2C JE @CB_Copy_Middle ; Copy the Middle then! - - ; Copy Right Edge of Bitmap - - 0D1B @CB_Right_Band: - - OUT_8 SC_Data, Right_Clip_Mask[BX] ; Set Right Edge Plane Mask - 0D1B BA 03C5 1 MOV DX, SC_Data ; then Select Register - 0D1E 2E: 8A 87 0004 R 1 MOV AL, Right_Clip_Mask[BX] ; then Get Data Value - 0D23 EE 1 OUT DX, AL ; Set I/O Register - - 0D24 FF 4E 02 DEC [BP].CB_Width ; Band Width-- - 0D27 8B 4E 00 MOV CX, [BP].CB_Height ; CX = # of Lines to Copy - 0D2A 8B 16 0000 R MOV DX, SCREEN_WIDTH ; DX = Width of Screen - 0D2E 8B 5E 02 MOV BX, [BP].CB_Width ; BX = Offset to Right Edge - - 0D31 @CB_Right_Loop: - 0D31 26: 8A 00 MOV AL, ES:[SI+BX] ; Load Latches - 0D34 26: 88 01 MOV ES:[DI+BX], AL ; Unload Latches - 0D37 03 DA ADD BX, DX ; Advance Offset to Next Line - LOOPjz CX, @CB_Right_Done ; Exit Loop if Finished - 0D39 49 1 DEC CX ; Counter-- - 0D3A 74 0B 1 JZ @CB_Right_Done ; Jump if 0 - - 0D3C 26: 8A 00 MOV AL, ES:[SI+BX] ; Load Latches - 0D3F 26: 88 01 MOV ES:[DI+BX], AL ; Unload Latches - 0D42 03 DA ADD BX, DX ; Advance Offset to Next Line - LOOPx CX, @CB_Right_Loop ; Loop until Finished - 0D44 49 1 DEC CX ; Counter-- - 0D45 75 EA 1 JNZ @CB_Right_Loop ; Jump if not 0 - - 0D47 @CB_Right_Done: - - ; Copy the Main Block of the Bitmap - - 0D47 @CB_Copy_Middle: - - 0D47 8B 4E 02 MOV CX, [BP].CB_Width ; Get Width Remaining - 0D4A E3 2B JCXZ @CB_Finish ; Exit if Done - - OUT_8 SC_Data, ALL_PLANES ; Copy all Planes - 0D4C BA 03C5 1 MOV DX, SC_Data ; then Select Register - 0D4F B0 0F 1 MOV AL, ALL_PLANES ; then Get Data Value - 0D51 EE 1 OUT DX, AL ; Set I/O Register - - 0D52 8B 16 0000 R MOV DX, SCREEN_WIDTH ; Get Width of Screen minus - 0D56 2B D1 SUB DX, CX ; Image width (for Adjustment) - 0D58 8B 46 00 MOV AX, [BP].CB_Height ; AX = # of Lines to Copy - 0D5B 8B D9 MOV BX, CX ; BX = Quick REP reload count - 0D5D 8C C1 MOV CX, ES ; Move VGA Segment - 0D5F 8E D9 MOV DS, CX ; Into DS - - ; Actual Copy Loop. REP MOVSB does the work - - 0D61 @CB_Middle_Copy: - 0D61 8B CB MOV CX, BX ; Recharge Rep Count - 0D63 F3/ A4 REP MOVSB ; Move Bands - LOOPjz AX, @CB_Finish ; Exit Loop if Finished - 0D65 48 1 DEC AX ; Counter-- - 0D66 74 0F 1 JZ @CB_Finish ; Jump if 0 - - 0D68 03 F2 ADD SI, DX ; Adjust DS:SI to Next Line - 0D6A 03 FA ADD DI, DX ; Adjust ES:DI to Next Line - - 0D6C 8B CB MOV CX, BX ; Recharge Rep Count - 0D6E F3/ A4 REP MOVSB ; Move Bands - - 0D70 03 F2 ADD SI, DX ; Adjust DS:SI to Next Line - 0D72 03 FA ADD DI, DX ; Adjust ES:DI to Next Line - LOOPx AX, @CB_Middle_Copy ; Copy Lines until Done - 0D74 48 1 DEC AX ; Counter-- - 0D75 75 EA 1 JNZ @CB_Middle_Copy ; Jump if not 0 - - 0D77 @CB_Finish: - OUT_16 GC_Index, LATCHES_OFF ; Data from Latches = on - 0D77 BA 03CE 1 MOV DX, GC_Index ; then Select Register - Microsoft (R) Macro Assembler Version 6.11 07/02/14 15:18:33 -modex.asm Page 15 - 1 - - - 0D7A B8 FF08 1 MOV AX, LATCHES_OFF ; then Get Data Value - 0D7D EF 1 OUT DX, AX ; Set I/O Register(s) - - 0D7E @CB_Exit: - 0D7E 83 C4 04 ADD SP, 04 ; Deallocate stack workspace - POPx DI, SI, DS, BP ; Restore Saved Registers - 0D81 5F 1 POP DI ; Restore R1 - 0D82 5E 2 POP SI ; Restore R1 - 0D83 1F 3 POP DS ; Restore R1 - 0D84 5D 4 POP BP ; Restore R1 - 0D85 CA 0010 RET 16 ; Exit and Clean up Stack - - 0D88 COPY_BITMAP ENDP - - END ; End of Code Segment - Microsoft (R) Macro Assembler Version 6.11 07/02/14 15:18:33 -modex.asm Symbols 16 - 1 - - - - -Macros: - - N a m e Type - -CLR . . . . . . . . . . . . . . Proc -LOOPjz . . . . . . . . . . . . . Proc -LOOPx . . . . . . . . . . . . . Proc -OUT_16 . . . . . . . . . . . . . Proc -OUT_8 . . . . . . . . . . . . . Proc -POPx . . . . . . . . . . . . . . Proc -PUSHx . . . . . . . . . . . . . Proc - Microsoft (R) Macro Assembler Version 6.11 07/02/14 15:18:33 -modex.asm Symbols 17 - 1 - - - - -Structures and Unions: - - N a m e Size - Offset Type - -CB_STACK . . . . . . . . . . . . 0020 - CB_Height . . . . . . . . . . 0000 Word - CB_Width . . . . . . . . . . . 0002 Word - CB_DestY1 . . . . . . . . . . 0010 Word - CB_DestX1 . . . . . . . . . . 0012 Word - CB_DestP . . . . . . . . . . . 0014 Word - CB_Y2 . . . . . . . . . . . . 0016 Word - CB_X2 . . . . . . . . . . . . 0018 Word - CB_Y1 . . . . . . . . . . . . 001A Word - CB_X1 . . . . . . . . . . . . 001C Word - CB_SourceP . . . . . . . . . . 001E Word -CP_STACK . . . . . . . . . . . . 0010 - CP_DestP . . . . . . . . . . . 000C Word - CP_SourceP . . . . . . . . . . 000E Word -CVS_STACK . . . . . . . . . . . 000A - CVS_COLOR . . . . . . . . . . 0008 Byte -DB_STACK . . . . . . . . . . . . 0022 - DB_LineO . . . . . . . . . . . 0000 Word - DB_PixCount . . . . . . . . . 0002 Word - DB_Start . . . . . . . . . . . 0004 Word - DB_PixSkew . . . . . . . . . . 0006 Word - DB_SkewFlag . . . . . . . . . 0008 Word - DB_Height . . . . . . . . . . 0016 Word - DB_Width . . . . . . . . . . . 0018 Word - DB_Ypos . . . . . . . . . . . 001A Word - DB_Xpos . . . . . . . . . . . 001C Word - DB_Image . . . . . . . . . . . 001E DWord -DL_STACK . . . . . . . . . . . . 0014 - DL_ColorF . . . . . . . . . . 000A Byte - DL_Ypos2 . . . . . . . . . . . 000C Word - DL_Xpos2 . . . . . . . . . . . 000E Word - DL_Ypos1 . . . . . . . . . . . 0010 Word - DL_Xpos1 . . . . . . . . . . . 0012 Word -FB_STACK . . . . . . . . . . . . 0016 - FB_Color . . . . . . . . . . . 000C Byte - FB_Ypos2 . . . . . . . . . . . 000E Word - FB_Xpos2 . . . . . . . . . . . 0010 Word - FB_Ypos1 . . . . . . . . . . . 0012 Word - FB_Xpos1 . . . . . . . . . . . 0014 Word -GDR_STACK . . . . . . . . . . . 000E - GDR_Blue . . . . . . . . . . . 0006 Word - GDR_Green . . . . . . . . . . 0008 Word - GDR_Red . . . . . . . . . . . 000A Word - GDR_Register . . . . . . . . . 000C Byte -GPC_STACK . . . . . . . . . . . 001E - GPC_Width . . . . . . . . . . 0000 Word - GPC_Lines . . . . . . . . . . 0002 Byte - GPC_T_SETS . . . . . . . . . . 0004 Word - GPC_T_SETO . . . . . . . . . . 0006 Word - GPC_ColorB . . . . . . . . . . 0014 Byte - GPC_ColorF . . . . . . . . . . 0016 Byte - GPC_Ypos . . . . . . . . . . . 0018 Word - GPC_Xpos . . . . . . . . . . . 001A Word - GPC_Char . . . . . . . . . . . 001C Byte -LDR_STACK . . . . . . . . . . . 0014 - LDR_Sync . . . . . . . . . . . 000A Word - LDR_EndReg . . . . . . . . . . 000C Byte - LDR_StartReg . . . . . . . . . 000E Byte - LDR_PalData . . . . . . . . . 0010 DWord -Mode_Data_Table . . . . . . . . 000C - M_MiscR . . . . . . . . . . . 0000 Byte - M_Pages . . . . . . . . . . . 0001 Byte - M_XSize . . . . . . . . . . . 0002 Word - M_YSize . . . . . . . . . . . 0004 Word - M_XMax . . . . . . . . . . . . 0006 Word - M_YMax . . . . . . . . . . . . 0008 Word - M_CRTC . . . . . . . . . . . . 000A Word -PS_STACK . . . . . . . . . . . . 001A - PS_ColorB . . . . . . . . . . 000C Word - PS_ColorF . . . . . . . . . . 000E Word - PS_Ypos . . . . . . . . . . . 0010 Word - PS_Xpos . . . . . . . . . . . 0012 Word - PS_Len . . . . . . . . . . . . 0014 Word - PS_Text . . . . . . . . . . . 0016 Word -RDR_STACK . . . . . . . . . . . 0012 - RDR_EndReg . . . . . . . . . . 000A Byte - RDR_StartReg . . . . . . . . . 000C Byte - RDR_PalData . . . . . . . . . 000E DWord -RP_STACK . . . . . . . . . . . . 000C - RP_Ypos . . . . . . . . . . . 0008 Word - RP_Xpos . . . . . . . . . . . 000A Word -SAP_STACK . . . . . . . . . . . 0008 - SAP_Page . . . . . . . . . . . 0006 Word -SDF_STACK . . . . . . . . . . . 000C - SDF_Which . . . . . . . . . . 0006 Word - SDF_Font . . . . . . . . . . . 0008 DWord -SDP_STACK . . . . . . . . . . . 0008 - SDP_Page . . . . . . . . . . . 0006 Word -SDR_STACK . . . . . . . . . . . 000E - SDR_Blue . . . . . . . . . . . 0006 Byte - SDR_Green . . . . . . . . . . 0008 Byte - SDR_Red . . . . . . . . . . . 000A Byte - SDR_Register . . . . . . . . . 000C Byte -SM_STACK . . . . . . . . . . . . 000A - SM_Mode . . . . . . . . . . . 0008 Word -SP_STACK . . . . . . . . . . . . 000E - SETP_Color . . . . . . . . . . 0008 Byte - SETP_Ypos . . . . . . . . . . 000A Word - SETP_Xpos . . . . . . . . . . 000C Word -SVM_STACK . . . . . . . . . . . 0016 - SVM_Table . . . . . . . . . . 0000 Word - SVM_Pages . . . . . . . . . . 000E Word - SVM_Ysize . . . . . . . . . . 0010 Word - SVM_Xsize . . . . . . . . . . 0012 Word - SVM_Mode . . . . . . . . . . . 0014 Word -SW_STACK . . . . . . . . . . . . 000C - SW_Ypos . . . . . . . . . . . 0006 Word - SW_Xpos . . . . . . . . . . . 0008 Word - SW_Page . . . . . . . . . . . 000A Word -TB_STACK . . . . . . . . . . . . 0022 - TB_LineO . . . . . . . . . . . 0000 Word - TB_PixCount . . . . . . . . . 0002 Word - TB_Start . . . . . . . . . . . 0004 Word - TB_PixSkew . . . . . . . . . . 0006 Word - TB_SkewFlag . . . . . . . . . 0008 Word - TB_Height . . . . . . . . . . 0016 Word - TB_Width . . . . . . . . . . . 0018 Word - TB_Ypos . . . . . . . . . . . 001A Word - TB_Xpos . . . . . . . . . . . 001C Word - TB_Image . . . . . . . . . . . 001E DWord -TGP_STACK . . . . . . . . . . . 001C - TGP_Width . . . . . . . . . . 0000 Word - TGP_Lines . . . . . . . . . . 0002 Byte - TGP_T_SETS . . . . . . . . . . 0004 Word - TGP_T_SETO . . . . . . . . . . 0006 Word - TGP_ColorF . . . . . . . . . . 0014 Byte - TGP_Ypos . . . . . . . . . . . 0016 Word - TGP_Xpos . . . . . . . . . . . 0018 Word - TGP_Char . . . . . . . . . . . 001A Byte -TPS_STACK . . . . . . . . . . . 0018 - TPS_ColorF . . . . . . . . . . 000C Word - TPS_Ypos . . . . . . . . . . . 000E Word - TPS_Xpos . . . . . . . . . . . 0010 Word - TPS_Len . . . . . . . . . . . 0012 Word - TPS_Text . . . . . . . . . . . 0014 Word - Microsoft (R) Macro Assembler Version 6.11 07/02/14 15:18:33 -modex.asm Symbols 18 - 1 - - - - -Segments and Groups: - - N a m e Size Length Align Combine Class - -DGROUP . . . . . . . . . . . . . GROUP -_DATA . . . . . . . . . . . . . 16 Bit 0000 Word Public 'DATA' -_BSS . . . . . . . . . . . . . . 16 Bit 002A Word Public 'BSS' -MODEX_TEXT . . . . . . . . . . . 16 Bit 0D88 Word Public 'CODE' - Microsoft (R) Macro Assembler Version 6.11 07/02/14 15:18:33 -modex.asm Symbols 19 - 1 - - - - -Procedures, parameters and locals: - - N a m e Type Value Attr - -CLEAR_VGA_SCREEN . . . . . . . . P Far 0280 MODEX_TEXT Length= 0022 Public -COPY_BITMAP . . . . . . . . . . P Far 0C0E MODEX_TEXT Length= 017E Public -COPY_PAGE . . . . . . . . . . . P Far 0BBA MODEX_TEXT Length= 0054 Public -DRAW_BITMAP . . . . . . . . . . P Far 0A0F MODEX_TEXT Length= 00BC Public -DRAW_LINE . . . . . . . . . . . P Far 040B MODEX_TEXT Length= 02A7 Public -FILL_BLOCK . . . . . . . . . . . P Far 0300 MODEX_TEXT Length= 010B Public -GET_ACTIVE_PAGE . . . . . . . . P Far 06E5 MODEX_TEXT Length= 0004 Public -GET_DAC_REGISTER . . . . . . . . P Far 0641 MODEX_TEXT Length= 0025 Public -GET_DISPLAY_PAGE . . . . . . . . P Far 0724 MODEX_TEXT Length= 0004 Public -GET_X_OFFSET . . . . . . . . . . P Far 078D MODEX_TEXT Length= 0004 Public -GET_Y_OFFSET . . . . . . . . . . P Far 0791 MODEX_TEXT Length= 0004 Public -GPRINTC . . . . . . . . . . . . P Far 07A3 MODEX_TEXT Length= 00FE Public -LOAD_DAC_REGISTERS . . . . . . . P Far 0666 MODEX_TEXT Length= 0037 Public -PRINT_STR . . . . . . . . . . . P Far 0975 MODEX_TEXT Length= 0041 Public -READ_DAC_REGISTERS . . . . . . . P Far 069D MODEX_TEXT Length= 002B Public -READ_POINT . . . . . . . . . . . P Far 02D2 MODEX_TEXT Length= 002E Public -SET_ACTIVE_PAGE . . . . . . . . P Far 06C8 MODEX_TEXT Length= 001D Public -SET_DAC_REGISTER . . . . . . . . P Far 0624 MODEX_TEXT Length= 001D Public -SET_DISPLAY_FONT . . . . . . . . P Far 09F3 MODEX_TEXT Length= 001C Public -SET_DISPLAY_PAGE . . . . . . . . P Far 06E9 MODEX_TEXT Length= 003B Public -SET_MODEX . . . . . . . . . . . P Far 0251 MODEX_TEXT Length= 002F Public -SET_POINT . . . . . . . . . . . P Far 02A2 MODEX_TEXT Length= 0030 Public -SET_VGA_MODEX . . . . . . . . . P Far 0104 MODEX_TEXT Length= 014D Public -SET_WINDOW . . . . . . . . . . . P Far 0728 MODEX_TEXT Length= 0065 Public -SYNC_DISPLAY . . . . . . . . . . P Far 0795 MODEX_TEXT Length= 000E Public -TDRAW_BITMAP . . . . . . . . . . P Far 0ACB MODEX_TEXT Length= 00EF Public -TGPRINTC . . . . . . . . . . . . P Far 08A1 MODEX_TEXT Length= 00D4 Public -TPRINT_STR . . . . . . . . . . . P Far 09B6 MODEX_TEXT Length= 003D Public - Microsoft (R) Macro Assembler Version 6.11 07/02/14 15:18:33 -modex.asm Symbols 20 - 1 - - - - -Symbols: - - N a m e Type Value Attr - -?x3 . . . . . . . . . . . . . . Text ?,?,? -?x4 . . . . . . . . . . . . . . Text ?,?,?,? -@CB_Abort . . . . . . . . . . . L Near 0CA2 MODEX_TEXT -@CB_Check_Right . . . . . . . . L Near 0D10 MODEX_TEXT -@CB_Copy_Middle . . . . . . . . L Near 0D47 MODEX_TEXT -@CB_Exit . . . . . . . . . . . . L Near 0D7E MODEX_TEXT -@CB_Finish . . . . . . . . . . . L Near 0D77 MODEX_TEXT -@CB_Left_Band . . . . . . . . . L Near 0CE3 MODEX_TEXT -@CB_Left_Done . . . . . . . . . L Near 0D0B MODEX_TEXT -@CB_Left_Loop . . . . . . . . . L Near 0CF5 MODEX_TEXT -@CB_Middle_Copy . . . . . . . . L Near 0D61 MODEX_TEXT -@CB_One_Done . . . . . . . . . . L Near 0CE0 MODEX_TEXT -@CB_One_Loop . . . . . . . . . . L Near 0CCA MODEX_TEXT -@CB_Only_One_Band . . . . . . . L Near 0CA7 MODEX_TEXT -@CB_Right_Band . . . . . . . . . L Near 0D1B MODEX_TEXT -@CB_Right_Done . . . . . . . . . L Near 0D47 MODEX_TEXT -@CB_Right_Loop . . . . . . . . . L Near 0D31 MODEX_TEXT -@CP_Exit . . . . . . . . . . . . L Near 0C07 MODEX_TEXT -@CodeSize . . . . . . . . . . . Number 0001h -@DB_COPY2 . . . . . . . . . . . L Near 0A8A MODEX_TEXT -@DB_COPY_LINE . . . . . . . . . L Near 0A68 MODEX_TEXT -@DB_COPY_LOOP . . . . . . . . . L Near 0A70 MODEX_TEXT -@DB_COPY_PLANE . . . . . . . . . L Near 0A5F MODEX_TEXT -@DB_COPY_REMAINDER . . . . . . . L Near 0A88 MODEX_TEXT -@DB_Exit . . . . . . . . . . . . L Near 0AC1 MODEX_TEXT -@DB_NEXT2 . . . . . . . . . . . L Near 0A99 MODEX_TEXT -@DB_NEXT_LINE . . . . . . . . . L Near 0A91 MODEX_TEXT -@DL_BREZHAM . . . . . . . . . . L Near 04C7 MODEX_TEXT -@DL_DeltaYOK2 . . . . . . . . . L Near 0515 MODEX_TEXT -@DL_DeltaYOK . . . . . . . . . . L Near 04DC MODEX_TEXT -@DL_DrawLeft . . . . . . . . . . L Near 051F MODEX_TEXT -@DL_DrawRight . . . . . . . . . L Near 05A3 MODEX_TEXT -@DL_EXIT2 . . . . . . . . . . . L Near 061E MODEX_TEXT -@DL_EXIT . . . . . . . . . . . . L Near 04C4 MODEX_TEXT -@DL_HORZ . . . . . . . . . . . . L Near 0433 MODEX_TEXT -@DL_LONGLN . . . . . . . . . . . L Near 0461 MODEX_TEXT -@DL_NOSWAP1 . . . . . . . . . . L Near 0428 MODEX_TEXT -@DL_NOSWAP2 . . . . . . . . . . L Near 048C MODEX_TEXT -@DL_SLLExit . . . . . . . . . . L Near 0563 MODEX_TEXT -@DL_SLLL2nc . . . . . . . . . . L Near 0543 MODEX_TEXT -@DL_SLLL3nc . . . . . . . . . . L Near 0558 MODEX_TEXT -@DL_SLLLoop . . . . . . . . . . L Near 0537 MODEX_TEXT -@DL_SLR2nc . . . . . . . . . . . L Near 05C5 MODEX_TEXT -@DL_SLR3nc . . . . . . . . . . . L Near 05D9 MODEX_TEXT -@DL_SLRExit . . . . . . . . . . L Near 05E3 MODEX_TEXT -@DL_SLRLoop . . . . . . . . . . L Near 05B9 MODEX_TEXT -@DL_STLExit . . . . . . . . . . L Near 05A1 MODEX_TEXT -@DL_STLLoop . . . . . . . . . . L Near 0575 MODEX_TEXT -@DL_STLnc2 . . . . . . . . . . . L Near 0588 MODEX_TEXT -@DL_STLnc3 . . . . . . . . . . . L Near 059D MODEX_TEXT -@DL_ShallowLeft . . . . . . . . L Near 0525 MODEX_TEXT -@DL_ShallowRight . . . . . . . . L Near 05A7 MODEX_TEXT -@DL_SteepLeft . . . . . . . . . L Near 0566 MODEX_TEXT -@DL_SteepRight . . . . . . . . . L Near 05E5 MODEX_TEXT -@DL_VLINE . . . . . . . . . . . L Near 0481 MODEX_TEXT -@DL_VLoop . . . . . . . . . . . L Near 04B4 MODEX_TEXT -@DL_XRSEG . . . . . . . . . . . L Near 0479 MODEX_TEXT -@DP_WAIT0 . . . . . . . . . . . L Near 0706 MODEX_TEXT -@DP_WAIT1 . . . . . . . . . . . L Near 071B MODEX_TEXT -@DataSize . . . . . . . . . . . Number 0000h -@FB_EXIT . . . . . . . . . . . . L Near 0404 MODEX_TEXT -@FB_LEFT_CONT . . . . . . . . . L Near 037A MODEX_TEXT -@FB_LEFT_LOOP . . . . . . . . . L Near 036A MODEX_TEXT -@FB_L_PLANE_FLUSH . . . . . . . L Near 037C MODEX_TEXT -@FB_MIDDLE_LOOP . . . . . . . . L Near 03C7 MODEX_TEXT -@FB_NORMAL . . . . . . . . . . . L Near 034C MODEX_TEXT -@FB_NOSWAP1 . . . . . . . . . . L Near 031F MODEX_TEXT -@FB_NOSWAP2 . . . . . . . . . . L Near 0339 MODEX_TEXT -@FB_ONE_BAND_ONLY . . . . . . . L Near 03D2 MODEX_TEXT -@FB_ONE_LOOP . . . . . . . . . . L Near 03F4 MODEX_TEXT -@FB_RIGHT_CONT . . . . . . . . . L Near 03B0 MODEX_TEXT -@FB_RIGHT_LOOP . . . . . . . . . L Near 03A0 MODEX_TEXT -@FB_RIGHT . . . . . . . . . . . L Near 037D MODEX_TEXT -@FB_R_EDGE_FLUSH . . . . . . . . L Near 03B3 MODEX_TEXT -@GPC_DECODE_CHAR_BYTE . . . . . L Near 080F MODEX_TEXT -@GPC_EXIT . . . . . . . . . . . L Near 0897 MODEX_TEXT -@GPC_LowChar . . . . . . . . . . L Near 07DB MODEX_TEXT -@GPC_NEXT_LINE . . . . . . . . . L Near 0889 MODEX_TEXT -@GPC_NO_LEFT0BITS . . . . . . . L Near 083C MODEX_TEXT -@GPC_NO_LEFT1BITS . . . . . . . L Near 0831 MODEX_TEXT -@GPC_NO_MIDDLE0BITS . . . . . . L Near 085E MODEX_TEXT -@GPC_NO_MIDDLE1BITS . . . . . . L Near 0853 MODEX_TEXT -@GPC_NO_RIGHT0BITS . . . . . . . L Near 0888 MODEX_TEXT -@GPC_NO_RIGHT1BITS . . . . . . . L Near 087D MODEX_TEXT -@GPC_Set_Char . . . . . . . . . L Near 07E3 MODEX_TEXT -@Interface . . . . . . . . . . . Number 0000h -@LDR_Load . . . . . . . . . . . L Near 0677 MODEX_TEXT -@Model . . . . . . . . . . . . . Number 0004h -@PS_Exit . . . . . . . . . . . . L Near 09AF MODEX_TEXT -@PS_Print_It . . . . . . . . . . L Near 097B MODEX_TEXT -@SAP_Exit . . . . . . . . . . . L Near 06E1 MODEX_TEXT -@SDF_Set_Font . . . . . . . . . L Near 0A06 MODEX_TEXT -@SDP_Exit . . . . . . . . . . . L Near 0720 MODEX_TEXT -@SD_WAIT0 . . . . . . . . . . . L Near 0798 MODEX_TEXT -@SD_WAIT1 . . . . . . . . . . . L Near 079D MODEX_TEXT -@SMX_Exit . . . . . . . . . . . L Near 027B MODEX_TEXT -@STRLoop . . . . . . . . . . . . L Near 05F4 MODEX_TEXT -@STRnc2 . . . . . . . . . . . . L Near 0606 MODEX_TEXT -@STRnc3 . . . . . . . . . . . . L Near 061A MODEX_TEXT -@SVM_BadModeSetup . . . . . . . L Near 015C MODEX_TEXT -@SVM_Continue . . . . . . . . . L Near 0161 MODEX_TEXT -@SVM_EXIT . . . . . . . . . . . L Near 0247 MODEX_TEXT -@SVM_Set_Data . . . . . . . . . L Near 01AA MODEX_TEXT -@SVM_Set_Pages . . . . . . . . . L Near 0207 MODEX_TEXT -@SVM_Setup_CRTC . . . . . . . . L Near 019D MODEX_TEXT -@SVM_Setup_Table . . . . . . . . L Near 0193 MODEX_TEXT -@SW_Exit . . . . . . . . . . . . L Near 0789 MODEX_TEXT -@SW_WAIT0 . . . . . . . . . . . L Near 0761 MODEX_TEXT -@SW_WAIT1 . . . . . . . . . . . L Near 0776 MODEX_TEXT -@TB_COPY2 . . . . . . . . . . . L Near 0B6A MODEX_TEXT -@TB_COPY_LINE . . . . . . . . . L Near 0B26 MODEX_TEXT -@TB_COPY_LOOP . . . . . . . . . L Near 0B2E MODEX_TEXT -@TB_COPY_PLANE . . . . . . . . . L Near 0B1B MODEX_TEXT -@TB_COPY_REMAINDER . . . . . . . L Near 0B68 MODEX_TEXT -@TB_Exit . . . . . . . . . . . . L Near 0BB0 MODEX_TEXT -@TB_NEXT2 . . . . . . . . . . . L Near 0B87 MODEX_TEXT -@TB_NEXT_LINE . . . . . . . . . L Near 0B79 MODEX_TEXT -@TB_SKIP_01 . . . . . . . . . . L Near 0B39 MODEX_TEXT -@TB_SKIP_02 . . . . . . . . . . L Near 0B45 MODEX_TEXT -@TB_SKIP_03 . . . . . . . . . . L Near 0B51 MODEX_TEXT -@TB_SKIP_04 . . . . . . . . . . L Near 0B5D MODEX_TEXT -@TB_SKIP_05 . . . . . . . . . . L Near 0B75 MODEX_TEXT -@TGP_DECODE_CHAR_BYTE . . . . . L Near 090D MODEX_TEXT -@TGP_EXIT . . . . . . . . . . . L Near 096B MODEX_TEXT -@TGP_LowChar . . . . . . . . . . L Near 08D9 MODEX_TEXT -@TGP_NEXT_LINE . . . . . . . . . L Near 095E MODEX_TEXT -@TGP_NO_LEFT1BITS . . . . . . . L Near 092D MODEX_TEXT -@TGP_NO_MIDDLE1BITS . . . . . . L Near 0941 MODEX_TEXT -@TGP_NO_RIGHT1BITS . . . . . . . L Near 095D MODEX_TEXT -@TGP_Set_Char . . . . . . . . . L Near 08E1 MODEX_TEXT -@TPS_Exit . . . . . . . . . . . L Near 09EC MODEX_TEXT -@TPS_Print_It . . . . . . . . . L Near 09BC MODEX_TEXT -@code . . . . . . . . . . . . . Text MODEX_TEXT -@data . . . . . . . . . . . . . Text DGROUP -@fardata? . . . . . . . . . . . Text FAR_BSS -@fardata . . . . . . . . . . . . Text FAR_DATA -@stack . . . . . . . . . . . . . Text DGROUP -ACTIVE_PAGE . . . . . . . . . . Word 0012 _BSS -ALL_PLANES_ON . . . . . . . . . Number 0F02h -ALL_PLANES . . . . . . . . . . . Number 000Fh -ASYNC_RESET . . . . . . . . . . Number 0100h -ATTRIB_Ctrl . . . . . . . . . . Number 03C0h -CHAIN4_OFF . . . . . . . . . . . Number 0604h -CHARSET_HI . . . . . . . . . . . Word 0026 _BSS -CHARSET_LOW . . . . . . . . . . Word 0022 _BSS -CHAR_BITS . . . . . . . . . . . Number 000Fh -CRTC_Data . . . . . . . . . . . Number 03D5h -CRTC_Index . . . . . . . . . . . Number 03D4h -CURRENT_MOFFSET . . . . . . . . Word 001C _BSS -CURRENT_PAGE . . . . . . . . . . Word 0014 _BSS -CURRENT_SEGMENT . . . . . . . . Word 0016 _BSS -CURRENT_XOFFSET . . . . . . . . Word 0018 _BSS -CURRENT_YOFFSET . . . . . . . . Word 001A _BSS -Char_Plane_Data . . . . . . . . Byte 0008 MODEX_TEXT -DAC_READ_ADDR . . . . . . . . . Number 03C7h -DAC_WRITE_ADDR . . . . . . . . . Number 03C8h -DISPLAY_PAGE . . . . . . . . . . Word 0010 _BSS -False . . . . . . . . . . . . . Number 0000h -GC_Index . . . . . . . . . . . . Number 03CEh -GET_CHAR_PTR . . . . . . . . . . Number 1130h -INPUT_1 . . . . . . . . . . . . Number 03DAh -LAST_PAGE . . . . . . . . . . . Word 0004 _BSS -LATCHES_OFF . . . . . . . . . . Number FF08h -LATCHES_ON . . . . . . . . . . . Number 0008h -Left_Clip_Mask . . . . . . . . . Byte 0000 MODEX_TEXT -MAP_MASK_PLANE1 . . . . . . . . Number 0102h -MAP_MASK_PLANE2 . . . . . . . . Number 1102h -MAP_MASK . . . . . . . . . . . . Number 0002h -MAX_XOFFSET . . . . . . . . . . Word 001E _BSS -MAX_YOFFSET . . . . . . . . . . Word 0020 _BSS -MISC_OUTPUT . . . . . . . . . . Number 03C2h -MODE_200_Tall . . . . . . . . . L Near 0044 MODEX_TEXT -MODE_240_Tall . . . . . . . . . L Near 0054 MODEX_TEXT -MODE_320_Wide . . . . . . . . . L Near 0028 MODEX_TEXT -MODE_320x200 . . . . . . . . . . L Near 0074 MODEX_TEXT -MODE_320x240 . . . . . . . . . . L Near 00BC MODEX_TEXT -MODE_320x400 . . . . . . . . . . L Near 0086 MODEX_TEXT -MODE_320x480 . . . . . . . . . . L Near 00CE MODEX_TEXT -MODE_360_Wide . . . . . . . . . L Near 0036 MODEX_TEXT -MODE_360x200 . . . . . . . . . . L Near 00E0 MODEX_TEXT -MODE_360x240 . . . . . . . . . . L Near 0098 MODEX_TEXT -MODE_360x400 . . . . . . . . . . L Near 00F2 MODEX_TEXT -MODE_360x480 . . . . . . . . . . L Near 00AA MODEX_TEXT -MODE_400_Tall . . . . . . . . . L Near 0044 MODEX_TEXT -MODE_480_Tall . . . . . . . . . L Near 0054 MODEX_TEXT -MODE_Double_Line . . . . . . . . L Near 0020 MODEX_TEXT -MODE_Single_Line . . . . . . . . L Near 0018 MODEX_TEXT -MODE_TABLE . . . . . . . . . . . L Near 0064 MODEX_TEXT -NUM_MODES . . . . . . . . . . . Number 0008h -PAGE_ADDR . . . . . . . . . . . Word 0006 _BSS -PAGE_SIZE . . . . . . . . . . . Word 000E _BSS -PEL_DATA_REG . . . . . . . . . . Number 03C9h -PIXEL_PAN_REG . . . . . . . . . Number 0033h -PLANE_BITS . . . . . . . . . . . Number 0003h -READ_MAP . . . . . . . . . . . . Number 0004h -ROM_8x8_Hi . . . . . . . . . . . Number 0004h -ROM_8x8_Lo . . . . . . . . . . . Number 0003h -Right_Clip_Mask . . . . . . . . Byte 0004 MODEX_TEXT -SCREEN_HEIGHT . . . . . . . . . Word 0002 _BSS -SCREEN_WIDTH . . . . . . . . . . Word 0000 _BSS -SC_Data . . . . . . . . . . . . Number 03C5h -SC_Index . . . . . . . . . . . . Number 03C4h -SEQU_RESTART . . . . . . . . . . Number 0300h -START_DISP_HI . . . . . . . . . Number 000Ch -START_DISP_LO . . . . . . . . . Number 000Dh -True . . . . . . . . . . . . . . Number -0001h -VERT_RETRACE . . . . . . . . . . Number 0008h -VGA_Segment . . . . . . . . . . Number A000h -b . . . . . . . . . . . . . . . Text BYTE PTR -d . . . . . . . . . . . . . . . Text DWORD PTR -f . . . . . . . . . . . . . . . Text FAR PTR -nil . . . . . . . . . . . . . . Number 0000h -o . . . . . . . . . . . . . . . Text OFFSET -s . . . . . . . . . . . . . . . Text SHORT -w . . . . . . . . . . . . . . . Text WORD PTR - - 0 Warnings - 0 Errors diff --git a/16/modex105/MODEX.SBR b/16/modex105/MODEX.SBR deleted file mode 100755 index 4da653b0d38749807dfb8156d36fc9787e1da174..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12235 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 diff --git a/16/modex105/PACKING.LST b/16/modex105/PACKING.LST deleted file mode 100755 index 88f817ca..00000000 --- a/16/modex105/PACKING.LST +++ /dev/null @@ -1,87 +0,0 @@ - -PACKING LIST FOR MODEX104 - -DIRECTORY: \ - The Mode X Library versoon 1.04 - -ASM BAT 26 05-14-93 6:00p - Batch File to Assemble MODEX.ASM -MODE-X TXT 2135 05-14-93 6:00p - File Describing MODE X Routines -MODEX ASM 117039 05-14-93 6:00p - Assembly source to Mode X Library -MODEX BI 3238 05-14-93 6:00p - Include File for BASIC/PDS -MODEX H 2943 05-14-93 6:00p - Include File for C/C++ -MODEX OBJ 5208 05-14-93 6:00p - The Mode X Library -README DOC 3259 05-14-93 6:00p - Information on this Product -PACKING LST 4767 05-14-93 6:00p - This File - -DIRECTORY: \DEMOS - Mode X Demos - -CHARDEMO EXE 13066 05-14-93 6:00p - Demo of Multiple Fonts & Color Cycling -TEST6 EXE 19990 05-14-93 6:00p - Main Mode X Demo -ROM_8X8 FNT 1024 05-14-93 6:00p - Font for CHARDEMO.EXE -SPACEAGE FNT 1024 05-14-93 6:00p - Font for CHARDEMO.EXE -SYSTEM FNT 1024 05-14-93 6:00p - Font for CHARDEMO.EXE - -DIRECTORY: \DEMOS\BASIC7 - Demo Sources for Microsoft BASIC 7.1 (PDS) - -MAKE-LIB BAT 166 05-14-93 6:00p - Batch File to make MODEX.LIB/.QLB -MODEX BI 3238 05-14-93 6:00p - Include File for MODE X Library -MODEX LIB 7189 05-14-93 6:00p - Mode X & Utility Libraries for QBX -MODEX OBJ 5208 05-14-93 6:00p - Mode X Library - Object File -MODEX QLB 11141 05-14-93 6:00p - Mode X & Utility Quick Library -TEST6 BAS 12733 05-14-93 6:00p - Main Demo Source Code (TEST6.EXE) -UASM-BC7 BAT 43 05-14-93 6:00p - Batch file to Make UTILS.OBJ for QBX -UTILS ASM 8506 05-14-93 6:00p - Basic Utilities - Assembler source -UTILS BI 2028 05-14-93 6:00p - Basic Utilities - Basic Includes -UTILS OBJ 681 05-14-93 6:00p - Basic Utilities - Object File -CHARDEMO BAS 3431 05-14-93 6:00p - Source to CHARDEMO.EXE - -DIRECTORY: \DEMOS\C - Demo Sources for Borland C/C++ - -C_UTILS ASM 8782 05-14-93 6:00p - C Utilities - Assembler source -C_UTILS H 2623 05-14-93 6:00p - C Utilities - C Includes -C_UTILS OBJ 648 05-14-93 6:00p - C Utilities - Object File -MODEX H 2943 05-14-93 6:00p - Mode X Library C Incldues -MODEX OBJ 5208 05-14-93 6:00p - Mode X Library -UTLS-ASM BAT 36 05-14-93 6:00p - Batch File to Make C_UTILS.OBJ -X-DEMO C 15085 05-14-93 6:00p - Source to Main Demo (TEST6) in C -X-DEMO EXE 41090 05-14-93 6:00p - C Version of Main Demo -X-DEMO PRJ 5188 05-14-93 6:00p - Borland C Project file - -DIRECTORY: \DEMOS\PASCAL - Demo Sources for Turbo Pascal - -TEST5 PAS 15873 05-14-93 6:00p - Source for a TP Version of TEST6.EXE - -DIRECTORY: \DEMOS\QB45 - Demo Sources for Microsoft QuickBASIC 4.5 - -MAKE-LIB BAT 164 05-14-93 6:00p - Batch File to make MODEX.LIB/.QLB -MODEX BI 3238 05-14-93 6:00p - Include File for MODE X Library -MODEX LIB 7189 05-14-93 6:00p - Mode X & Utility Libraries for QB45 -MODEX OBJ 5208 05-14-93 6:00p - Mode X Library - Object File -MODEX QLB 9739 05-14-93 6:00p - Mode X & Utility Quick Library/QB45 -TEST6A BAS 12743 05-14-93 6:00p - Main Demo Source Code (TEST6.EXE) -TEST6A EXE 40544 05-14-93 6:00p - QB45 Version of Main Demo -UASM-QB4 BAT 30 05-14-93 6:00p - Batch file to Make UTILS.OBJ for QB45 -UTILS ASM 8506 05-14-93 6:00p - Basic Utilities - Assembler source -UTILS BI 2028 05-14-93 6:00p - Basic Utilities - Basic Includes -UTILS OBJ 628 05-14-93 6:00p - Basic Utilities - Object File - -DIRECTORY: \FONTEDIT - Font Editor - -CSEDIT EXE 39242 05-14-93 6:00p - Font Editor Program -CSEDIT DOC 8629 05-14-93 6:00p - Font Editor Documentation -CHARSETS CS 2144 05-14-93 6:00p - Internal Fonts for Editor -MOUSEIMG CS 128 05-14-93 6:00p - Mouse Pointers for Editor -PALETTE CS 768 05-14-93 6:00p - Palette for Editor -INVERSE FNT 1024 05-14-93 6:00p - Sample Font -ROM_8X8 FNT 1024 05-14-93 6:00p - Sample Font -SPACEAGE FNT 1024 05-14-93 6:00p - Sample Font -SYSTEM FNT 1024 05-14-93 6:00p - Sample Font - -DIRECTORY: \PALEDIT - Palette Editor - -PALEDIT EXE 31954 05-14-93 6:00p - Palette Editor Program -PALEDIT DOC 6688 05-14-93 6:00p - Palette Editor Documentation -CHARSETS CS 2144 05-14-93 6:00p - Internal Fonts for Editor -MOUSEIMG CS 128 05-14-93 6:00p - Mouse Pointers for Editor -GAMECOLR PAL 768 05-14-93 6:00p - Sample Palette -PRIME PAL 768 05-14-93 6:00p - Sample Palette -RGB PAL 768 05-14-93 6:00p - Sample Palette diff --git a/16/modex105/PALEDIT/BAKAPI.PAL b/16/modex105/PALEDIT/BAKAPI.PAL deleted file mode 100755 index d4d4a6a097bb4a8dd05fbaf5509f700be81b1b52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 zcmZvaK??#Q5Jta4k>xhchKAID9Tti}mO5g7U!dKIx>8Wj~Y(D_9fe^$) zq~HZ4*hm{H+YdxCl6aCpB84F2g+^&ZW&6Q7IXMYV&Q7Fo78k^wqz#qr2Y^>#10KL! z7#N1J;x<&aAB^Fh;lVH&<^r)9*zC9smF)*>d9b{fazkYW)cg-{{Pq!F&fRpE+dlJCu4ehhhcyPv){@Bht-sFQSU z?`Ur=rF3mP9s`G~&wl*=$?EXx>WcWGqImeQw?g*Kn|B$j<8L9yRdu}o^5y<<<={3R zJ91BVemh_^&-b1i&-V^qIlB4L%_JF3?W2uH8ylZp>f!4Cv;EZ}DLZpBtEjiQ;#L-W z6c4L7u75%mXAG#CsbTFza*OjM2!4p3-Wj(2t#=j~I%LJ8fw*LYP9bC>57Rj1{9ZA7Mt z6KS4Onx_vgng8 z5ChN7E_A{E#u-DcG5iJBS|ct9q$P*ET4SFcHJ_hw-p*IT;K*e|=JU&VGnr1~~8H#+(P@Jm%Ot$eFuBJd>w6;$lt( zZ_xR{Vt$gPB+U&6Ju11bu*7}I%|Ck}`V-5W(=w<`MO-ZROI!i+W5yLm>$%e<4W%p) z7`$kjGQ>J~AGk9ZCWI)&)d=%cYd-+8T!t)QpYs5Kexkqot2Z4Fs z`R41b%`e0!UwyeH{!fS&ZY*{lZ@m|a$Iauzf)uuYju0V`tBS9351aLIx zKoYE`puPCvqHV#G^>wrnw9VmR)6&9HxV5`0DPT3nNkt;8{TC0{5AmfyPur=6UpQ=s zxYo!wnILk%u4}5ni%GGJ-#Ow4ghL)og!7>;E{stKtVwWvI2Xw*@hE4KQLFRa)0hVH z{}+J}BY08(?-3mP)Jab%MT$7DR|L0b_`tuYN6S;-uczYEpKvZ!rX1M!Z2JyuC%E7IvA=GDa(`>QD+soN|ACXgvqk-8t6F z`g+b`2YrteKAa~bA0JsVwj+xV5RCQLr_l%|@VE1Ph*N`Wpk_V#vYyv-u06L(E9KAY zn$Pj}eir>RM^&{1s#<$J!mwX3n@lF#&_nC>86X2k^*$bR_5;^75OWrqIpVS%j_3Kj zU$BjM*bnsZ?9kg;v}e&js#Nd~5GEQhM;P#a24hIyzo+2B|8*@NyU3c zKhoDl(t4iF`zI7CEZbYo-&2HyY)=?K#(E3@obyW5K^Oq{Pa2IdqU?;31F1O*Ao42S zpH^MH76I4}Zg!5~0c~&l{;AHgn)NV{g3yP^a9{fpdzW07LSf8BB*6Q(VGO|>EaR=u c@7}+=v9)<$+}Yd`AAF4Uy(KWY!FGSkU-|#d0ssI2 diff --git a/16/modex105/PALEDIT/DIAGONAL.PAL b/16/modex105/PALEDIT/DIAGONAL.PAL deleted file mode 100755 index 5dee1969fc3e9dfe5bee855460c512ba3a850e69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 zcmWO4fugA}007W2rBcR}O4&6{OBqvI%Gm$^)qCd~4gg>dt%dE`E^_?PL#dC+Ix03v zg)s=;JrU8Lq&#;GQ)M~QO6RqSZwB9WAV;TF@YMk&t+()|8fhN>SZXNw zlH!w9V#CCj>_H=5QV=V{ZZuhLc}5w0$MS6i*`%&nsp;R@Bdai@dcK(N!vFYzrI<7GXD-dFIX2(s-WZI;c#O)}jL4N_^8 zTcu8u)7UF|4Pgnx;^Wefi<_1%Ep1+!vLNT!Y}jtu?JDGc&+$l%HZrbP=9$}#$AjmS z*Na+Q6g63GQa8zs>ZAOi5HxtjUZd00DYeRtim4rL!)D8N$Ihm-XMf}viC>HtuD_TQ zw{IT5c@|#g$5NW2HtQqFP3lMas4(adbn^P@b#;~O(dtj5s{bLtd&Hga3vnS?g@jJX YqmSBdQG+6i^ro%x_>On~3fi#v3oGhTWdHyG diff --git a/16/modex105/PALEDIT/MOUSEIMG.CS b/16/modex105/PALEDIT/MOUSEIMG.CS deleted file mode 100755 index 101e2084b44a2da8647ea004e20ffc599897dc29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmXwwyA6Xt5JVqBG8vc(jsUrhb3`33!65-+x3nvTG6*aUE5LfeXnx8{>eQ%KC5%j> xL+EL0E7_Ch82ppy6n|(>dLPTn2m0He)d4^WFp&TN diff --git a/16/modex105/PALEDIT/PALEDIT.DOC b/16/modex105/PALEDIT/PALEDIT.DOC deleted file mode 100755 index 61d0b2ee..00000000 --- a/16/modex105/PALEDIT/PALEDIT.DOC +++ /dev/null @@ -1,166 +0,0 @@ - -PALEDIT - A Simple VGA 256 Color Palette Editor - - -PALEDIT is distributed with MODEXnnn.ZIP, the general purpose MODE X -Library for VGA Graphics. - -WHAT YOU NEED TO RUN PALEDIT: - - * A Vga Monitor - * A Microsoft Compatible Mouse - - A Mouse is most definitely required, as the keyboard is used for - nothing except entering file names. - -FILES NEEDED IN THE CURRENT DIRECTORY: - - PALEDIT.EXE - The Palette Editor Program - CHARSETS.CS - The Palette Editor's Internal Fonts - MOUSEIMG.CS - The Palette Editor's Mouse Pointer - -SAMPLE PALETTE FILE THAT SHOULD BE INCLUDED: - - RGB.PAL - A Simple Palette with Reds, Greens, and Blues - PRIME.PAL - A Simple Palette - GAMECOLR.PAL - A Bright Palette from a Game of mine. - -WHAT IT EDITS: - - The VGA DAC Registers, all 256 of them. - -HOW IT WORKS/FEATURES: - - PALEDIT allows the user to see the entire VGA Palette of 256 colors - and select and modify the RED, GREEN, and BLUE values of any individual - color (DAC) register. The entire group of 256 colors can be saved to - a disk file for later retrieval. - - Individual "SLIDERS" show the current RED, GREEN, and BLUE color - components of the current color and allow them to be changed. - - The Following operations can be performed. - - * Raise, Lower, and set the RED, GREEN, or BLUE components. - * Copy the current RGB values to another Color (DAC) Register - * Brighten the selected color - * Darken and selected color - * Reset the selected color to its original state - * Blend an entire range of colors, creating a smooth - Transition from one color to another - * Optionally Lock out the first 16 colors to prevent - Accidental Modification - -DESCRIPTION OF OBJECTS/FEATURES FROM THE TOP DOWN: - - COLOR SLIDERS: In the upper left of the screen there are - Three Rectangular Boxes: One for each primary color: - RED, GREEN, and BLUE. Each Box has an arrow at each - end, and a scale bar in the middle, connecting the two - arrows. The scale bar is much like a thermometer, - indicating how much of that color is in the selected - color. To the right of each Box, the name of the color - is indicated, along with the content color in the form - of a number from 0 to 63; where 0 means none of that - color goes into making the selected color, and 63 means - that the selected color is saturated with that color. - - Clicking the mouse on the slider's left arrow box will - decrease the amount of that primary color in the selected - color. Holding the mouse button down will reduce the - color value all the way to 0. - - Clicking the mouse on the slider's right arrow box will - increase the amount of that primary color in the selected - color. Holding the mouse button down will increase the - color value all the way to 63. - - Clicking the mouse on the scale bar will set the amount - of that primary color to the value the represents that - position on the slider. - - LOCK Button: Clicking the button toggles the lockout of the - first 16 colors. When they are locked out, they can not - be modified, and when selected the word "LOCKED" will - appear below the color # on the Color Information Display. - - LOAD Button: Clicking this button will load the Palette file - that is named in the Palette File name box. If no name is - given or no such file exists, then nothing will be loaded. - - SAVE Button: Clicking this button will save the current Palette - in a file using the name given in the Palette File Name Box. - If a Valid name is not provided, nothing will be saved. - - QUIT Button: Clicking this button will return you to DOS. - Nothing is saved, and no confirmation is given. - - - Color Information Display: This Box is on the left side of the - Screen, below the Color Sliders. It shows the number of the - currently selected color (from 0 to 255) and indicates if - that color is locked. To the right of this box is a big - square showing the current color. - - LIGHTER Button: Clicking this button will make the selected - color brighter. - - DARKER Button: Clicking this button will make the selected - color darker. - - RESET Button: Clicking this button will restore the selected - color to the value it had when it was first selected. - - BLEND Button: Clicking this button will let you Blend a range - of colors together. One end of the range of colors is the - currently selected color. After Clicking the BLEND button. - You must click on the color at the other end of the range - in the Palette Display Box. All of the colors in between - those two colors will be changed to represent a gradual - transition from the color at one end to the color at the - other end. - - PALETTE FILE NAME BOX: This Text Box is used to enter the name - of a Palette file to load or the name to save the current - Palette as. Just click on the Box, and it will change color - and a flashing cursor will appear. Now you type in a filename - or edit the existing filename. Press or click - outside the text box to end editing. - - PALETTE DISPLAY BOX: This Box shows all 256 colors in an array - of 32 by 8 color blocks. The Currently Selected Color will - have a Box around it. Clicking on a color with the Left - Mouse button will make that color the new currently selected - color. Clicking on a color with the Right Mouse Button will - copy the color value from the old selected color to it, before - it is made the new selected color. - - Message Bar: At the very bottom of the screen, this Bar will display - information and messages for various functions. - -PALETTE FILE FORMAT: - - BINARY image, in order of VGA DAC (Color) Number. 3 Bytes Per - Color, 256 Colors. 768 Bytes total. The Files will be exactly - 768 bytes in size. - - COLOR: - RED: 1 BYTE - GREEN: 1 BYTE - BLUE: 1 BYTE - - PALETTE: Array (0 to 255) of COLOR - -COMMENTS, QUESTIONS, BUG REPORTS, etc: - - Send the to the Author: Matt Pritchard - - Through the 80xxx Fidonet Echo or - - Matt Pritchard - P.O. Box 140264 - Irving, TX 75014 - -CREDITS: - - This Palette Editor was written in QuickBASIC 4.5 diff --git a/16/modex105/PALEDIT/PALEDIT.EXE b/16/modex105/PALEDIT/PALEDIT.EXE deleted file mode 100755 index f69e172d05b32a8aa903c3857db0b199c84a91de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70230 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℞6Tu?4W+slD)hB_fLLp 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 LZQpnAec3!FlnS+^wcg+JrM`4b~t%&As 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

RuOR|xlwa%V{n zlGlpv1G479z2pH3r7d-kqN*SSD!UgQRV2bHfWr-EJGX#UOsrC&G8-a-JAE1(`LcLo zd=f&bO*+xH>CLULxKh}Ka~I?zYg{#)f}5B?4jX1#mD*_xFW zZc+APFH*vzQ9h9ZV%)shBVX8Gewfh5ci@H=GZe>r@(df!c^Bk&Z0!+CcCA@&*|F8$ zAoZ;{G>3FP&NgE7;8_M$`i!iYnG=C*SdDmTv}Bjaktph$$FbON_2j8kK-6I7S}5X~ zifzA`%B%8ST@s=+nlAYbKe8lgbF0oL0GRRn@nD-viz*8-TjvmGr}GX-FL<@=1T^3$ zUyeTC^fhwU;?CalGI8g66u8%o^ft(j_4pS|c9XX?N6ERux7KkRTpnq8*0BE+T2&sY zU^KgIi}qinioF3S!C83vTCSbU+*HjHYw)Vx=Rha2o7eZmbst8`Q%<(4!ynK@p+w_e zV?AmzaO~x$!&Xr^fHS~^aE$kPMfyp`mp_&$3yBs;9bUR#0OzE@-Lm8IWLqglVJeXO&@}$)$vAAU)UPBOQ7s`l2AfI@x^GO_=Cjz4p^~RuEMaUhX z=p;r+v@1+CStL@z`@zcxp1)qKj=r=5GRnI5$v~)r*w0?Xg*1?1y7W>mXPPpGIbflz zXPzuY$N7|EP>mI}9Oo-@W2UjfKhD$*vFC4lj@h$tUNZ=@&JV7>Sy})(+S#YzxflJ3 zR$WsY0vdUDm02w4>gx*Uq1`ld>~q)UyV;rhZ_47oJ4A=XZlrQ^iu(N;HMX*E`^RgaG8?ui1{SVEOMy-Sttp=Byy#Q^DVIW7DU6PX^8LAhhegM5GP zLh|=)WloGed6jth;4lAi`sCM(_>1`Sy=@&7TUDVKXQ)qH`0plI|CO+mrkSnY(2fpn zCi5t!*@IQN) z3Y2HJBI%N?_G=B72>Qt$AIocW%7?v$V~PLzgra|>#156l$L;F;1@BY^mA40P>XT$B zGUt7^mdgQ^j|?2a4_JhMJQTi&^M>%!V?%!1D{kdnC@eZwL`vj3D>fqia#%zm*{9_y zFY!W|5c!WZ=%KGpYaNxK0I?I~+E*#$8BZJ#1jfH;CD(cLhymhl{Z&&H_f`8-QKHf% z!$^p=_vp~FF3$m?s~#+VxMc}9D@n<@DJO@4@d*-nabegQx?8Bext+R`_vK)9&ZoU> zfc<(;`djcc^h-zl?v0SKq2+4qV-KKY(`VKYUV|AgSr7xQ`_E9jz)4r2yQJ)udfnFO z321wRhNF0p&D7h!XXF`7bu*3o%(|8+KN(x;l~*Mc-YKu3TU^$KV6RJs{R1D#g!3mB zqyEJ@Tw+|d$7oXz#f-%e7P*E1!-yc$Zj8&?w_B!KUAC=>AwCPCr?KxsFO=}rih zaE;huShzp}e9V>NBXp08n(TPbtU@&WL;eD}T3exDy2}n)@u;jbAm3~wSU$T}SuATK z>Vek2^feZ@%n3A!T1rX~5uclVgBIL?Aly^^V+y_vRZNnkU_5f(EKPG%cZ`r)gS)}4 z&6>syFslZgQw|vSC;L^W2{$(o3nMP`l#+KDOwbw%X?8nRls5<*F=yU1Y()sz4g0Uk zOc~}jtAB4a(+er!aQzXF&u7uDMrR38K#xa>8#kB__I%OiJ37BjC(*1Z&jEWpd%H#o zL0Y`NV_298{l>_ri@0h6VF`)QT_LuZKxk^*c3yuuh{(cDfn{5n3)N0FjfxzhhrMgkL`&Unr{RNC`NuskLzdu(s!4l})4(NLa3DJR9`gx9<)6k}J3G6}Awng)d?wj$XExPR3 z__|SbQ;jLMwFOQjh4{ z*zl!l$2F4BgvPRI$8l7TN?+D5cy$#$aaBIO{%Bs_IcvwUX)`U5wF}twE`88p@(7RX zbvL^I>cGY0c?x^<@lUk=k)KZW!9_~ zLy&w(>^dO8w$F#!x#ONPTc9(YIqY@)zJ$3^g+<*~*>REgjHzVZoo9>{;jiXZpj7#u z%ovJ&)Jn0YNaGr%P}k*3bVBol*oPjrEvDptjbks z4H*31E>G_8)>J;vAqsBN@x)gaDPcGLH#b*PjvRpe?^v-O;Y5HWBqOPCcmJocY7tCA zZ>3@m)wkxqDDuiO)R2^vs+dH<)})tRvi@p?;2O; zt1`>~an=32VN=`v{9gYO%XIVuvyLiUU#`X&IoZrOb{S74i)@ek{`2$c|1~QkU|=<) zmC;5Hz$ySg*=YK(3cQCrs}}ry&Sf}IQrQ(YQ%;*h``CgtHp!8-ykB1!xRJJ`ZWQy!=!{Kx{#^7L&}h~P{~ zLVRwT;08;ov!X9y?la0*C_8s?T5&96*|yLYWO)z7>@kX@MJCt+BkYm3c5C!y$OWTE zO{ic^nNqx)48fBj{c1r6UT!Xmq(LUy0v;MnT>Yca6QalKe>%h2W*A5E28|Q&O0K4* zneC9jBE_-stk$}bY}m;>h4-V1SDRu4{_tww3MsLMQA-B{6Z8kA3v#-gU9M3DQi(ht(he=?Df;N*mLp8oR4H$(I$1+7 zM>3mQ0MRf0aeKJ6Nn+q@U_b7d6?V!X)jx8a6+CqE8E(x@9;*UNV|qRfyg{mzsnWo6 z_K=)Lo*Zz!+H4DfGDx5ot#d8X1YSz>Es7sk3oW6l_X`tRx96oy^%;64Wh#wVZr&w< ziPS1>@dOT0VrhGMs$*XmxaW+(G=wj~FMOQwUdV7s~Oa&jIWl^QRWURoUL?iCDM;$2#W^x7opE!}^}ISW=;h`5g0UNuV{jBsdx@ z8zWz6pw($o6}{$(J@}*u34wQAB%pg+jO>IbBV6hJX@+egyI>BXAPxyZf_+K}zmbqA z5K_9v%?|#H<&8R?s1aB5BPH^H?cY~F;(A={SHQ;>kuW3GAibTC?N!**qD6IFF@v1% znt30C3TO5ShDRAlQ26&R?bX%{BP&YLwPLw@k*?9WBfJB{GBoHU+I;Ay`<)STHw??D z2wgh}J)pYH_wG5Q-~LB#95zmDDqQOR4p;3q3ZYo`IiAfrKx1ojV@b@mTu zxdld&miez9NE3SQzgyejGSUEPYnr?KKktn4vt-%Z0gYV|jDuXeks(KNTT9@A$G6G- z4_LhRP>x<;TtY1xg?5_%!FD|INAn~`PUyQ%q@?QiLJ4*2yaEPj;a9Q`0xd@~>9_u@ zK2=x6=f@cYCzKz(=4ou#{28p(tebbi=i#4mj@lWW`8Q< zC(%~4n<`fkqhB|WCWJ!2+;Ra(*-%$wfR53wXk$_bWXBFNR;&~l6o!%7)JJUjht!7Y z!ccPbh2-dzS~VcVfj$aFhpHeBI>(iY@GDUzH=XC+3M*`_+m8gPJ?H^q#1Bh%g)GJS z8ts~<$lb7?V}@`Y|56ep4}7?q5&!zm5@(MDJa==xUbrUqtjtfl{bsnJT>VRziW){q z@dw=(k;}`@k)F04tQ72i)v+g{DBzI+O-ZlMb*?ed94XnQ!G%gt-|$?f&Ous+(ZswP zwo;i0%*x{24H7nSk+tTQS0*nFE(_YgPAmFPjN;r?>8ufL9;CANmJ8X;=r=*6)_YKY zH9pz8C}*lmY=Uj!Y)U}acpwIDd|{&FqDT&)&LvowMCrc#7C|O20j^h0>WfSI;u}`_ zVnj*VKsiniwgXZ&hhlA)iv9~$l_<$Nb96P^@El!H#RfuI5ZQrVFY7`^d=n%vfuFLX z*`(rU4nJrBe!3vyMEZNNH5nodr7!+R)X*}RPrcE_Rl?oSDF9S3@rVZBZBc?kPX=4BDW3)SM7tuCFtoPm%@fF=cAdAgm`rUqczk(j|jOVsgdCCkFz(Mqz@D zJJw-pB(X>4f80RM^gZlB7LlTPZ3|zzh2Hgr+Is!XlfAzql&;^tm99e* zzN8TlA3=P2$lu*24D+3E&QOOcgu$yJ2oS*4{A}{)uItF_JL{8qz|cD3Palk2!l8lC zo>si8>+Re^%IABF)028q*I@;C3^#(>yoJqmA;kQ+vt z2R#YFX0Y<_2amt4jgQYaCEE1XxZt3uyOh(&2t{B?`jk@LSvx@j-^WCR(3YE=rt0a_ z=rDHiX1wcnN06sK-34|uMj|4W0oQ9z%hG~zWs z*-odq@b2k}UTX5eH}$y+PnEFZ0?%8^25`2cfj4sIMEi5ctX`3XwsI#v59q`&?5Le8 zjJ}RPk69$FdK9iCtb7zi5cPbds`jTS>GvNPEm6lHnmt@l-qoDp6z^c>@KwXm4fz~k z@DEwAqwW*r@WGCO9}(DiRD)q9OqQC(PM?V}t-#Zt59@0s*E-#SccFZIA3_-Tb3XU@ zqsAM|sAowx6~;mR?T-?Q8?z%pM&4@K;ODbqf8Hkb zQAd5!s}*6#E4kjd<@I5W;JvuEY;ZOwNo)lY>bl8CMBd3z0k{)z7?a^pT9c;Y}uyjV6=ojw4afQmQeG8Vl%k22$g)PWQ>NspuRN2?kP$hFZ`~CJ~Hu z7>y=TtRxxGb}eCbD1Z0hQ{i&e?}Z>4O(GZr1L{jc>q?~8ltqEX;|r2WCq_%g-!%}N#jt`++5u@W^*+Zdq6j1fcMz+o( zYbTOx2nPzpITSH2r6G2Vzxko5pt7e1#-~tP+J$TxaI*MA>^eg1GGXQow3^6Cl+XZt zzxfHM79G%HlFCs4z9>3WBLJ2VIjR*#P${d(8#u`yJITH^D2OhsYj_X& z8>uxAV>(q~)_|lBu6FE!uuYjYW0sap65CdCTTaL>EDz9!e_8W1qgr)zLZs3ovE>t{K9COnLq}*_(I5}X zOD2U$MMmZm6RO?jv+8eI0p_FqpvNbw)Q_k0xPj7yTb?+fh6AJoDzPEk=C`YYJceWHph%LmMYjUDts ze!rU&1R=o|Y@l!GOBG=#^i)Kak4n=Jg#pbbD^!wv*)G&rQrlsH9-^rKq2IIq(9;U0 zfQzi49D7Dco2ooPwG}gxq+(P`4@OJ`W!MI1I06Mu{!i%0Xb7XE4J2aXMT;;C`KW_3 zp0Fe7p8*)a2-0jjiw@bpiRtjTlN&7gP~@(PWsV+ZF9au_{dCltPf_$SbQ903w5=q^ ziToe+XBLNN6QMiB5MS=KA|Tv@7wQMKFDOyT5*=q-S#)qM)a%6$QZCqQz70b4I;zO| zgGu8@c{&^hwD~Wfli}M>xCee=ojmV6F_*0kih3xjzUSjGtwI2}3;Kt^njD@n=5>R} zKr2Zsc!)v}aUB_zdl~@-xfCxsH3SP+Y7uj4k?_S!9K?(C4U6!gBLk91)S!Q@SVbBR zryDrl`1J*bgKk~(*(Vv1i!QQlvG)x$SZC{h<=p}F`a!}Gk0RN{W~RKp38G$y6HHzQ z6PiwObU4KFrhP_)EvUE(Xxe#^I@hP!CbJrors>t`1K6Y`Unftr%DmYr+l40Yf*JQT zp9P0h9u6!fLHv55AOsRi=Hhm~1O!082stcCyJtxB1$lsvf^G*(Aj6QyW8cQihI^>I zA5$YiZJ8Z2yD}W+ljk}g)}_E6dQOQ$QCaW?tJ(s?wm(uGl;zvpyJ-;KMbJdWlXEE? z6&TZ_IYSlE9h%nt2KSH&VU@YGlqfY>EF%I|lRc_*QQ}hi4};1?`+|{D)h-4`t+dgj zaocJ`W6Bu7Yz?FkUekGDi{E?0=MK}yRzq1x2&qoI4g5uSfx89rXb(R;9`q5|qYP5u zz|bp@mE1sIW+4?Km`X`Oq&wQGvBdc6FNAvR(Pm{NHz*TbDF*8Hagyd+nYn{rjN4pU zieF_6IGRjT0tI^bAUCi6f}M|t#z@#Yxx9#-wwj%<@86C)A*y{Z5ex2kN{2Y_7hGY4 z5MkGESR$LFEXnUkA{F**j~s?)HfSP01kambC0i*UfC?Q1rO@VhihlpP$PspOfB`~2@`;@PX|-clTjx`v2;WZ{LTt{hRg$f$|9frys-t z6JU>!w$e>L1uc~mAbt4^v)`w}jb^0p!z869UY<#zHV%+h!}K0ez~eAS@r4iP1Z8iC zHrgO9j{Wa=Ed+OcR@6hmT#7-G@+R_l5Zl0qHJyQG^W9xf^CWS}CdRTVF(I?UakP{v zBS`CtZH)|4b8tapWK53jE(tE|8<%%nlQRR!`}IbDcpEA(@Zthu;DPer+HF;GBvGYR z%>b>j^Z7ckz7u;^zovEVc81dt^jxW2(!do{4xG>mn&rDS%x`lc3w&{OlW5GKeSyQ2 zsoXx_zca9BfSZ+Sa~PujF;o8w)B~NsA3q*|0y3sBIBMwkOMZtWFV7`S4!VX-Jnos__YP`ZQ)zYpmL_FmUN5wB)*z?# z+Ri%NFY8x<)F3g#2;yQ7hYH#ZqxmeToGs%pRyo>5o(vU^-!-k8D)tvsUY7$$z&{B-eKeM=I+fmCQhj{9>&HcBPv6<^)Z3%jd z>7%kxkC;zTZd$rH9E&52U?4w;J!F~wq;My%n#V0vE+K~k$&mVhE)7p|ne46(i?) z{vNdRZa#1q0z>+h*@#iX?LB=u7io<&)_A9A{IYT!FHaQPZLQiJ3#)*^;AC?Cn$>+(o%; zfrf+E=Em3o1V=fjm8^RxB>%9FAQuk&gqJ!zpD^N}*~5jqlh?UBrvVpoJcrKm zfo>$VD_4;>Nf67NMos~=ErQkU+D_pNN`cbAh8(>y@yARyKe3D&TiH9jHBJ~jZe!c^ zeti}|+LS<*#`8?O`w}-D{ED*75A-FxI?x`s*3kU#E1C7wfr^xaA9t zD1J#~lvB{H&Bj#z34{W3dAp4a|B{fvT~C~5@bSUf!$A+VHl~aAMuYQ{-{Bd7;^slI zIBb>Otj{@BMT-g=$Q;~Mt#n?4epiT6m8p{*J&KvO11T?%>>Qpn590($vyxWX{a{Bo zL?*E`X<7yZv69@lw;=)=;le1NVZP?U{-Jg5(q6Zn{Q|EUyn^n5QjFGMo(HRtQ&DO z?85kc^DZ5%SN2(T!;M;dJ`H{QH1$Y{9cBPIJ zXgoWwEX5sRzb!F1s9&wDWVB{e>TGYA%*idoI-?I~2(W16uxKo2rR?C3Ydc68`G8gE z9!?*N&KuIM@K8&-#=->Gb7@Z~IFBjAcilJ$ARR6ja~ABltQIgoVNcTQ1Jk+d0wc3Z z1a)&cp@HNWKO&mXGu*Dt<~z}F77fupNw*Q}o^b|$;HZMFxukGr5!~+otj)}dhSqUZ z4e1a6V%q8e9W6UFmpFYLofLq8_6yF|ld5AvIfBQ?TmGZJ8eF_*B%19FuN~x zVJ3w1)HhsnwmFWb9AfUBy4%_+ln7z~~nqJQ8fWt%{mv8vuT7VSY_4qY$G(tBL8(E2IA*+YP z?HPL2H)B4U1`Cdp+nu%U7>p^aCm-r<CG`CJ9+1!*Eo+e<$HofMzBUa=(w^z~Nl)2DISJDZ6jfgl93-${Z#pwCm|DAn zfre3WP6(Psq*E0lWWRTU{mzLyf+OfyJHLnmZRgihv(QIen7oL~fM&|*E1^X^pya<)uKHz`brth|7r4|L*9^4P3P_q*C}p zsvt51piCt`umw`y7u`m2b`xWX<0NvfGR=l^Ydvk&uN#vN&k7}88*^vSRNX!7nH|4l zw%d|ggc+g0@M{E?@xv5Wq2dy7>3x+#hwhH0qBa~m{b+y?IxzILSu=hr4=YG~y37-? ztijqC*TLiC`Gt+8!TS`OlD)<%F>8@mY1(5k!_|6B;Q-*E7H4u{6XA6Sw87XW$|V2| z=uIJnn6&#GklZfCgu6rl<}o)?5vzjAq7q z)vVuAs^!obNB_zl(3sE+hx?W*h5E{c7h2W9S)muEC;^#TZ$h{akH$)-<{3OuCK*!K z=Q1%n)2ritty_psb;0`txq_g3t~7X-7|XUN|H(GzZH|sj1#Tc%RjhJej zsU24xJj1)ADL4)F3h3P412j&u5oA3017%}o{u6uT*Z;8Mn(Ddbl?>@I3IyS-}&*fuJ}|CNjR=FIxdaSQ zXx^iF#J#Qvs-B;osW&42ojJ91E(!mLLjvB6Mt+hyRP-Qj7u-Im;g!|L>#_Fpp@a)5 zGRK)YF3(w9)v|7D+uT8xa#;@}5%EcjYru$Jz)&k_4?fwwXN4=HqCNG8<>cg+4FXU< zJSFcY(VV`U+8G7OS)N(W4S12}zKYUgy3O5Vpz05QutV5n2Ln($FOJzw?sf^c#j3=odZkUHi=IjGb zPKW_dbUPdP_vLq~_SA1P6`oHY3S^T8lb2`4OEVq8aUIcHh;ic}dvy0Y0-+{P<+Qrq z!KA$p?|PkAS#?HDmtfe}OAj>t>63$s1~ZSWV-|o@#ATK3gH!*~M0q)mfd`I(6js%< zd80}L+Dz#kA&UtI0NPZe2(5bDpL`-yRa^p)S#Hi&WDH7%MLu^_=^^}E+KQ8{@fW5O zr>QK>=`_+<4riKQk*#t7KQ~Q>ilKN2=JnB&hvObiWMI1)MhRJA5=8CR$+S_Kz25*I zfy?KKD}?!v_CPW8#h~oFxibl@Gg#QM4h3E)hd$@rJVe#spmU-DV+(wUHybcyu!6&+ z`HD>}PFdDh*ezf9+p|FeBEL2fp@Ljcv!pjrVZ#~3s-98f3)3S&uJ9HZL|r?Sl~|MX z{U~)BtMjOiL~4jn%7xMfwBSGbKDYD0`h&z9VRXRRxb(J4OcjWYFC@o z%dWX|f%8z;@i=)VA*laB1O0+jOic=nklyJ?Wv}stanAhhOpCxuyRF_~gu=qM-aOdg z(xtBoGHXHh1Alejk7U5u31hpmP{J1s>6b*8;lMv#LjYRNJQsXzMg{`ERKFUdA>D0S zp%BVx^{OEO4rI5HFqPg4NiL}rV(6dK0PW;iKbf9{=By>qKhP&}d0ji*hHJ&W`TeqG z5QkZQ1Y)-f>ZdATFE+(mSLaaS@Md_!3DRYR6Xtd!kUT@U9tGBxQ(q!LL{8jCs9O(4 z`|giCsSx&g0pa)%wol2HjS%Z8IuAFY02X522OD17=SSbuDmC>lqA!&NGzelMWhVqw zk+v1q$*9zKIbD&@0tyy1N}&dt0`t%&3=tCr4}}$RD(I~s0?e10fqZ-47TqfK3+n=R z-Ttl%LKfLO%}r!i^O`&(b#gyk;iQ!^c}KlN*$*mM?G~~Kg;b6JaSd%K&l@Ic2{d-U z)5#l2?E;bRAEqv{syrIk6qC0mP6VR!k7a>wbcbPBJ#7J|fLZ$PTfD#HP}U~U4))b= zQg*}nq)_siF)w=U;fla-`D;4N?Ty zhD3qWM%04ua+~7g|DBu{^Qll5BYu&M%akzI2i8xPgas>bOmf1^o3zMvv<96%t{8MnRLhA`%01? z>R<~71!OA_*{U|KTik64vSaZZ*>Pq{i`0*&>0ak#+5d<`)K4{imPxN2lSVCwjuipXmv5|Ts?lY%DHVl@)fsuMFFfC8u>S{pg={}i-_ z<$2e#ZitCUR&7T79A`FN+qD3d%W=T67c)IxTc1B%!eD;%v{A1$I2|S}NLZ;)`0p`l zW_|;86?~xLrMS|~-6hRyaC}B|5go~{(276_VYB&Dugj^s{c1xf6?Z3-3ZKOgmN7Tc zQkjdAGIL7Q(Zie)Uwkqv*|5^K^t+JB4HG8~u`>;kC#7ww+ZHF&9~3|~Qp~xQ4St1b zIP3LxtylNt06_}%_aHiOc}7&41}%0l;dW7({PSpY$?Q)E@JFAVenc$lSFf(nx7mkBXI?MI#p=o)1CgcqF!!M+|)(yqbRG{_nHFV@JoZ*`PM%xmE@FIuyM z)XmGNuDcy7(y=UIcqburh7HSDVm^vmw&hYf*1J7Rboav{?(7Ogz$q;ouvse;gRbdc zqrK3hS)D2plm0}@HVX6YJZf}-?qSAzzC2RXGv5Ju$bVcx(M23z9&7&vsUhOXAzecm zU8&^E@vDY1sB+$kgQvzEO@l3?GUCL#)QKa`nZvm))1!tmuu^Mm`7^#!>c|?)kz>}0 zW7d&FN;f8=Qfq3t*nwl#nWI8?TDis?SHtAQ+Omc+r?TFGL%oJFxU$}nW3v5MLS-OZ zy4|`Dv+$oKL+k&1@W6J_>ewGjw5tDR8$92& z30DNZVypW&u6)#c5J$bxe;GS@g7Sg|!E!}ymu9PZW!m>skWVUdkUx*jsO{B@eKu8+ zRPrXwH*G3faNqRX=o1`Bfcpc6y_Zv9XM6nK;#XtAQ+3$rO;WaEd!N3d4whP*(SdA? z;w%nfE)!}SgDY{SfUxkf`OBEvS~<%sCBkLNQG@c-{jODTB9nFHE;Jl5v!z3xffUyD zuxwQDB_kVJk^7s9w^oc#$oVLE$x|1;x7M4y~8jZaBa$f(_m^xcKLbFk#` zjTzO}(-p1;9O;|(;*T2(0O!Oy-*si%dJduj&73q4M222G7|8!Tn&Gry^Jhgi3Q(PC~n;tf9(GmPzDw)MI}S^k>bdw^I#X z2ukwhIwleS*p1WDa1FsKY5|D|n9RtFPS>qVnoJtRac;Mvg!hiIhN8Yh1{j?X&$ zxRf+368#|+&~Xu^)UDRr27vo%564GY3ofO>FknQjm z<65nbBXG|^vpKg*C323c5;n=8drFBEw>T4ro&txq^V@+7(8xrbRusdb{ims36y8b( z^W(n3C9wyphm+TPtbCR`@{w7L%{k?3!gA`=Ce~zc9-*hsvwMNv>a*=fs%2f;*KxNl zd0W3fww9@6QZf6p*BcvO>B_x?29`q_sR~imfPwzh8l~0GTT`=*7I*s-%brrIQOmfw z#deK66~%22>f-wg>RM(W+Es*u+&0UEm)|NYe|NQBTD2;lb@Yn<(~oFKSE`*O91aXt zy6GTaHQXDFZEr~br+Gt|QSrbO$&DXRESv!!LBO^I#a3tYVPy#_Afhh*0t$hWMjopv965j{#PTQslGp$3M%R^D2IUMDTBZR?1$})(}%|)hc*Y7XJ)t`W>+v zNNrK&L*Qh3$fQR0M8WVNpi@+tGiE>x-BmPG?A!f#1xf80n1u2xvBzm<*ue>Q=E=JC;Tn=~IBpHmZ9Xzhh)o>b8FE zP5Ynf3EVwEVHu(hE1jq6(d)xJWb*TDBpN!A%kLM5QokIsq)fRoR9K>5In+j`6Ai7(9g&hi%>lE zPL+Qp3|e;u{KuMMwa417SifFvLry-qx}efphvVS!YA>!Z~Tl2^=-@j>A@?uwhU zpqXqEZnC$x(fZ=ANeyiJh2-%4+Uycg^a}_VRDM9f^*Zq68~$l9fSJ5Sb|vidH*}VD zUzQqdCM0?~)al-3U>#{UVr`8>KSYFW7Ou^s|2IPT2d0CBFkTl~fvae|JH8QD?pLIp zG1Fn&6#S~--hiYE&$j}5^4d||@P3#Rw;gSmW?HD-)-&84$v6;lZ8e|v!lrs}fZC|Hh(#^>Z*#+{4a07) z*~h&gnQI=Bec`t_89^n(*jg{ZB-N1TpJKmfd~;-@mjYU+JpkFLtd*9y&p#B4iWj2vq!<6 z=&IuE??mz`frk`f60-J4lGB8?%)P}>Q-imaR1Yb4BLON82xwB--gim3yvC)V*B zwuz@}3A^wXa4==TSZv1X!(HcV{=;4CE2-Fts+Z;%z4D&smWb{R^I~!!|CN1(8?q9D8{F%)%as=0?Evi!>D7f#)K7nz zO1(=>n%Mux_*g}j<#@hTTaPR$T?2haJ=-m&*tqoqFVlGMS}bWf&jtmZlUPzZz93>F zfWHp6+J?j?NJ`_GOH@R{p zZuHXgsp+eR0Ji1u3SC&oAJLv~x&}wW3A+Sf`Rihu?4ClgJ?cr2W#Y#kcXG?)Lz*Ho<7al45$+ zfQ72*?QiyE?Dsc&Ui0hvvH(#kS^hUye$r)1bhd#2ZbI<}_M)t&Fh0sWOCU^Br1YZkv!&yb`UT)h>rocL2dRxQ_f zR6h-iO^8X~=+Weu>Qp`45N1bUAQY#j$zZz}$ThjS1UBilCXQuf*nm*$D`P9HPW5Zd`oK-w_2?h^X+5fJRBdlgpv*0v-wv00J{St> zjx;QLk+vhyZrAmae%o$N1O|R}`Hgzgl4~ksx7lTGhU53t+X(!ny%S%Jjp1MNgzp|a^OEMYHoQCBW zeOx5CLKB$D>gms~;(wedMHL9>)~lSn*BEq~6FOkgspS0Vt)(BAtm1Aw?Qd>c#&_sb zemZQO+f@xfpEjxfea5K%;OP?CWG3)B-zCvB=H}&CYu>AFWS1x~WqsI~tanX6Odf6t z+|nE7tv86~wHR7$HE2GFdWpZwPA09;;5OPers3)Tne{OjYx1>DW%O2-pPCqF5kkL<&|R zOK=Fk6n-VVF8rIYL3l$b5jF}gVUzHtP%69yze+e}19|?4yucs$lg;axk{nY!DLJBu zN}lde&(rSS5$E~crKffbd2@32fJ&~FsSRJ4+oC`*JC*M-x8nQ!|ALEAsJPBBXB2`f zHLTdDB1m!AzkGoD!YneXFyPONEVf#J4zN{g6C4^EA$MhX> zM}A$;{2{5=IZ*2Y66ZLywc;jW-y8?E1A?XPd)E}K@g|GT2_6IJ%Tc*Q?iyA8ZCal{ z0>}=F`+WDTjW`==zZlH_Hmo*_7+r#ubueS3$o(T3~hljU$X4?7Bc%$@ykEv^3>_Eq`VHX8q}m|HaeZ1k?VINv+>rTMSU$KS!f6;k>3xhLmV&V5vRHd-_+%n%KU z@I0FVOr>%yFb|Jq$6w%Q-{mKZ`OJMV@D##S4S5gbTD*abT4N)UN2C z?lG*gz~uFSsr38RpkJ^*AM50kBbe^&k7f9a0wcOkRvwjS!K!Y6%CitoBecm(jwxD- zKV{5BJKT{dB6&E%Cu=rN&dDO{cW^aE`%s+thfj<=H3as>=MaVXmU*AgyED%_?*ybn^U(YW^AqNq z=VPm6XD^+UW4(fPNgg;Tv0o=gRI8b>3I6hB;UL767%=w`Vuay5(DnB*Md@__K zZ6FaILvjWL8HRtc3g^5Y12D*AfcCx||8~n_0TmCV!u&@kQ7$XUng?PGey1W2e>%v0 zQrzJUT`w$s01MUwK}-Aqgk=ATPeCc{ro@YC(Rnlpa$w}4nhDRc?|{2=Hict%-fDdH z0somZHC5J(5EuD8;X+C!_}s@9=!iRUZ~frz4=yjDo{4)V=b0G`5d7L{s*4B!%8`r= z0>1u(?*PJYPo}mL1u|3}NdO?ifa~IP#KsVyY=H!*3j9IQfj=h~##Ji^AncPlV_hi_ z{V`K#QhTi+?GxhbPxj1r4bNc|CpB@^1krFD!W91CU|voz~ZsL*9?<@%2epn3t0D zZPsDu8kabg$r73|;_zW+xrAugxy&URna3q}YnWN&661%R&m33FTqAQB9sG>NuQ~n| z!XK*Rbr8jNS;+uJ^7gnca9TR8<=`z3{SK}Op31kd`c8b`q&J}+Z=NeZB)vT&>y>$X zy&ui-6^iloK1ReHMKe=4Vj_04jZTu2O{`fEj2`y2S|#%&eMkVXZ33@&=R|Jeg!rpL zI8LebhePr#)oKM4(vC@B(*&;oDT3hnes9$&tET}YR0Lv^B>kVQ#nI|}>ibSz5-_kh zJQ?oeSF0GJI(i7-F^Rec&Tyusm+;GneQzP&@Hd76Q`KK~hJPGqBa8X6Mqc+fMhzfe zz~_~+rogt%q`-WIdm0DY)n{fYVP|iEJyUhfT6WKMBeK26)uU6x{*m${`Gr17ADnZk zZ+KuvuUg9ub<(U(cTOya&OKf6BBog*(L5CNaFjtmCh$F3`RsE^rsTyb&%08-gk7{b z`!X#7zx32AmQ|l7{>6G+hx*??lpj+~U~D=G8+Jqk@G;o3%1!Oe6fx>+t3y{dRE-|N zVP;6o8j_fGPhu8q!GX*<)wQab-R*s9$u6xLWrsc5KU_{7qyjv>Do$~F5Bir#J z#^}`vSF>;rs~u1E{6&IfuViLEw2i@%0Gk5gg8d~nl;N>=JP~BB$N0HYld(h2QjcQ zPVqmxn}19e5Qo!uA$Wxou>54Am>BX_qhT*>blTbbU^n32OCD@%VjqG(dyCcAjk*0w zzUD3t(Qy2@3J%uR<2V&N2#J9Z@`n_^40(DJ@!S*4jO-I#>1*;!ToDH z1ki2Pfj;7l>k{hdP9%SwZ~1Lv1$EI%bOcTSr``2HoHO^la60~L94vbDS0$o>{T}@_ zYjrFHkFVU3LYr^y1UB`uKZf5+Q_oTxEX)J&xdW%?pp_|4;6Ng9ihS0O*^HU&j&fN% zDdzxni`A_!v6OX|4JUOus@NOPl4tE$gUrB-;m;KF-hhsIPI{6^zBUf6f2u>p-YCN+Ke6)U9n1_Y$SO&Y!KDJ%1LBC@cO+ii z_$L1AcM80G?@cl4uGI^hrOISk@iPY+t#JA@%QX^HJiA=~u2uat6X_a`DUL4J?t(xA zb{fLV^^nu=hAJn4m&f<~|ElkT3CjU*Q^JjQ~pdg@#72&Gr=?n$JTIXmDc9+si>eZv9u8`CVrezD2KfyIMx#1 z^*_mWm3kvPuEMs0A8#5td?xAzThaaPa1CuGoP~UxA>GBrowAu)cJR671QR}n#(8hp zKM#J-INf1jFIJp34LViN=_lF>C;6i!oE?7rw>AT?Dz|7voH2HubUI@T z<;~E>z=;8boozFsVpuI>>x~0>&w!)(dFWHB$hM^`;cB9&ci0LQQ8B)^Wr?3suR|eR z{l{CEd1+6g8waeRPNQ_d# zPt`FGU`zOPhIH%_<4Tc(D;J^Pr?7n*McHa`S*vNVP+R(qoK4 zgwq0FohXqr0fKx?4zQ4mpM-O*(g6igNVLVC$_ir>31l4HBp{uGtV6m76`yZvxNRFL z)Fjj=Hc>yy*hu)_DD4vx-G+h;wh`Y~wIo)p%^(Ne&~S^_czy6H7N*24`imL+=b^+Z z!UlO{gT_L}CKRO{1-2i*V>5mRH{=gR#bBJ%iTyfT)k_(b;cy&WnIwA=geXdx@O9-> zRH+F3Pzkm-5(A(&+u;-VK`As8rBEo~nYZa=Hwgi2R7`1u%9ZkYh79iQT-&sf_=5uO z*ECSTh#k^?>DX^0xJ#-E_}MRbvvoRj#B_$yrS4+Fe+!P0D8gmPLBD_3yD-bdmadq< zvckU-YNFnTG+bY134gMQ+G8<6`iaE`>2=FONE_&VkxkSY`cIH9 z%s4c$b(}oCkYj$~*+mNVPhT#Mi;GKNm4tfG1w_g=D1M{(lVViyuHr80=+z%j3ahvh zC;nE4Vp=m-JiBOdgjx^xiPl#%YGV?_QEBaFA6KBd1T?mG<6-SGU-=h97Jg-NbcMn5 z7@Pyo#@yY={^j1$6>v-GGb)C?crp+ZYGY13i~r{roR4XwAW-m6-xkw0VHVNOAAp6P z0ws)^S3Oy%-~@5l3pYgIEFXlI{}bHauR^GbK>Orqx0f#&16Ew^1#oZRgSgteUyG`A z@SC?JK+cf=ezm76995~17uvd`;GF)r25}32cuJ4jW~92G*aCOhn&dtGCt@^pe^H-0 zqYmH+J8}7c)%NWHO&wX|b8|1rB?%!s#0Lmb(ORk0LTjyvfsTwnKLtIX3or<6T}BLh!6fC4u-+-)zP3t1A5yd_6$7Ov%tGRXEe|Wt{(*9 z7)<7_g;5MfB7p`dmLfh(S<_qU>ndpnaQ}1G*@vz(k;jQO- zw_ccH_aJ&Lq@LtvZG1{u@5!emxz{$ro`Kj_gSfDb0u2SwupfZ3lUvU@wqAJYDb)6U zpYaw?xz{2$q_I85pSwYLhi$zubr!<&o^3T$e>l9iH?>20ZoE6KeiU;|j>+*9fv*8X zquoRYlv~D^dnhh9$*DJ*8{w36-=VbTw$-I;<8!4J_d;9rNr<`$GF{QbGvae8MPbB$@+W#pPEgk;Vr!EIuD7K^Cq~ zFg}=I$i(e1{MlMv_vD#cg`{)JuOh0v7EJ3>z}pUir$w&u>Ldn;(F_m^Wp2~uN5Neg zV&6mDD?(;O`2$429#t8#g+k9{evIMe=IGXzCj5P=W$UG>0cfjK9Ds5|pV+5A*?OVW zcPpDR%u(ws(~sy?4`mDiTdx%R@^EA6Fr=54+o#45DbNhXzLvL|9_MQm`Z&Qs{^*0QU)JZ4?X70^PQKQw=m=>$CluXy=?Cx$}nlK z8T|eXuk5Y(f-!{cHQ^KG(7olbPzc^@{DLwJ+52Z$IQZ`U%NI(6eDAt1R0i?h^G%p8c4UauGjFjQ;fVOCB?LY7L2oct)WBYW7Zw2+G?UQV8-BHd$jdLnlN1QwF-K~InGDC5dh_f&HLL2Ps#Sqa~ zTJ_{%YU8}TkOes>{!^AO`;+XF>|@zt*;;tME6bJX;Q5|xuIvx+%#anzjPRTzTPiDu zr%9G2D}iUKOd~6U=VxB;dPNPNINa>@7q3lTfAjjgyv*w#@*m*43GNH>>+%I&2CpSv zx8-kmC3wy8y6g93$f-dyhy24oV<kB4;y;qdQHsD@T%e84`0tex4Etz zaBUlY0Aknkp=`xbuS;IX;S!z~;EGdRfDjH(RIKy92G9Fm*Szpkq;SXIhj$G3@DbvB zyq0YfAjm^yPr-l^*IsxYlfz7`q{mgFnrWYTi>pIPrA+t@IMz^eh}G1{m%dz z3?}kg-CH9*J@0)KzxSB~k0-6#atgoyvwQIT7o)za=2wu86OaD9MYRRf|9bU_CdXjy zH<%`gPW|c4mZ|d#-}L}SUY~vTrTf-XXXKEg`QqRuxAyOQ#~0wo-pk2j*NN}JkN_#J zuTv2skJZ~eA!hNC6BWz%ym8bUVm3WgH}uKBzvlN`3JOKcqfZ>&nfBQe$nmG9#?wh( zbX!3!MSnAewSAF3Ya7;yHPh3wPT0FPis5}@((cfougC55;PX=&CuK`h7j@&xzVU7F zvW;`nZsC}y&}H*f8`HjiK7|Nv9^!HLu~>fxhv?l`{WGJt-c-Q*KNjw=%xdX=;?HB1 zto+j?R{8mPDTEf-{^$1M2kbA<(XpPxU%qz83?mWH-M?b_)On(>D{+nft}F6OYY4RsV{O`R zENZ>Gum;zgtCx#$FBdmZrW)wACuFh!nNl`P_9#sZ69sHl!2%!D{>NaD+E8EWKVt?v zyN^9*wOB32cCyI==NMyD&X;`+z7=4l zl8s{lT1R%9O8xl}t^wvKq_TDj7tT+Co#tpz$h8vt*C@kw5zWKg;XxSOZo1^AsUIS4 z2BeRyIS3T4R5t7gK;}zUPPkkIBtYOD30GvBiL_Hp6F)?~wUnO1X?rbT$;R}EdTT}c zK)_lg88E)b-E)oaTm&D*h1n+DGr}-Wa3cf`%%_>QAoCsT&!RICyY-J@kY<|2})p*e-_p zeP7~!+aj^`I0vv)b=Sp`#f|Z4Kkio&N39quhu`|x-}ZrbS|3_|n-n=}NwLAF`~g+2 zmo$iRN44De~;wpd)6;PBQmAzY?_S+L3n|6n9tbepo%Q11rwz>5$h1z zB>I4sj({ERGVtqyrGgNBpp@o1gf}zIJ2_6nG=^n4C(x!oMg_HgUNYS+-~9qaCpM;tAVmgqQC`f^q}YoPx{polZ8 zMUG40%RgJhE}+=8Vp-=Z(w;~eI|$=BWW0ckSCGAe%u1gVab_E9+s#^cvqyHbExRLo z*WUuIeYvquv1XX8Q%@Qj3ATf60+$6?F&S?uS6~)-VG&`CcCmomW`JM6m$?vjXAE51oPM*WuWzy_hL|Nv(h&$}2n4 z--Lj3%5j6eleT>`eiu7#kllVA+qd8V4FMbYoWIWo3`6t6ngf5D7kFtwpzWjg-}^x4 zmr5!&A-~|w$WOcl`2}o4x=u@K7{CGn76>p>0dc_)SH}iyLif0%Rp9P!2!Y0up(`=*poP8JiM1}xsfz_t_^dspZX`T6J*!*CAzW))7 z8LiLe@dQ+o;o6sa57YV=TzQ1>c?@;s;S<@(9H#w_`(5&T;?5}IBsarq17fky6JvN{ zb;NHIGu9CUiEaN7eQX+Jnhl<2lqo@+vj7|qDl}5qc8ys(q`Z%)DWy%|znLII7N~C9 z?;b)VKYY`CA@QYEz&#R1bK7)27D7^!t@u- zptV<`%blf{s4{bbWF5?s)~ih|tiLQ%Bn1rwXv#84{p)-sm=#cWc6@1Hf;*!8A!4*a zD?PBQ^dPgfDd-DmR%OW?Ui0zb&2bS@0;9dOl<4`Vng75 z1;OhiA`{{c)a6` z9)i}s{vOY|xlVeR1qc55VtzVnBw(-Vybiy#-CK7Zss(8A-R-jZPQ*$3XeVEfX-=V% z-1|SAt3}uMLA%@Fw!(d6%KNdAg;O7z~*u!k^wypt3p#3G2pBgW7LCfXcs`k!$~1|c}ztoe@M&hVlD zDcG0r&!QybGJ;gNa+h6L-D7$QpJ^pirupKCUhXq2CZ3TsyWnFVN?<{WW-|$PKFP*= zn3E+|J3knofByMCZUMG#mwAnpxxrL-mq~9(Yj@etBJ+GH)6UpCk^Ka+O9}38LY)ax zbsI}n5sin3wO7iY5RXeQnqeoOaJ52jokX9`i_+6xI2rB*oSjovz${?&fQn5$*R zIvQp?kSV4KtsVn_1Wb5M5SL-SsyoBM28WiiUe*3MFwOr~9=6`YN#g%}g)b@Y1GX$t_<^rzmv*;X+P;fx0vIK|0K>!{n)_LLL4Sqg)%XeJ^-dCW zwByEF$_!2eKQrb`3G^Yh2sk9H9l*&YuyXGOHeCF0>+qN&bLwA#f%p>JT96~c$%nz;pAJQqCf^V_;?#P zUM4b3f^WhQ&L-2w2i|4l*dmHuBWA%fSY#U~0$;`<&_SfvR#T4idMdJRmFGg>(-L`- z6SQKia(B8q#C=)4J{miPR)-8^JK6S2w&g~L(|FHmtjALi6ab1Wwtq<2CppwEyjdz?dPk_usT2_gHWA;2a zVCZ{!w)Z0@@}$MpiCdoXFSE$%^wX-R4dj2rjbHLl!j>-2w!s@RmBEDG0sc`Z$AgjD zPspzA!#`{E@%sz;X0699`?Lh9d3 zFBhk|>#`@ZN3w?o5qE(v56ptxHPDYwgNA(m9+VlBI;dGbS0Sghs)0GBfo#YcT;-KO zd2NG{g_n>45_1?B87(dp6R^cClBC_6bd00tKDOYHhpY4p~ou(lthy zU13o~8D7K>+VG0B4lHnP;saAW>9_dV{J@}vh`1)uW6yF80%AvRyp%DVndBY2I_tvv)kAO3oZB94C8V{Z#3+;^CR-;@y=-jN96J~u*NoY zLUqcDM6#C*?RaFq%od4dZis7iZsZ4n$W9o8i}-3P5_8w_X;cW#yV_YM{dw1bwfC#n z`>0ftu+` zv;S!ttg#eG%Y+w51YHC+(qV%g@1?VSyDYG#$B+IEl5f1t33RCUxFc+WxY=f&EtMXH zF{y=&rHdU)Bg?Sma?5qL@Q`!aeFv;b%%8nB}> z&zD)-t?kkU@PI9VHc3S5DsYTlO~GpT3X~}-fnGDLECf~y6hR%fdfF<}qG~x%LPSmpqtjPdI!k`~_$^u(BAzTsw%v zF>vIB!z$)l9}W{0kR-CxUU=sdFE|gz=>$9+jKRS^?joRZXR*F17x?gib2F~X0)rvH z+2K_D6*XPg5*A!+0$KX^D&oZnyg=AqLKf>qoyuy}`htQ3CtZP@Cq5PHuwK+E**@4W zvYmk@Er&s(9Aqe7`XxgeE@vN{g&GoI0~n-yCa7~*smm0>`LiSj)KD7iRNBh58=8_#c@?TCT+ZZ zZCW5U&88X>usMbYZn=fHA;Bu}z$|2IzUhQ5F^6UD!HQ?3@jwMyXqnu}Wp6lId5+~3 zrZH@mlxbroHyIMd*>hn4po7IBlJ$=Djm&j|`I(q}&oEZnxv~)^qVihjG(e}z>zvb~ z8Vx?K-ut;h^0|Tf+(6*n0?CHj%5#>3Ymn{a&AHhb2bW`(c+SS&%nRTB-a^~o_~4xE z0}$nZGY@1q+m`LLscz=ww%OUsdD$7ZCmaR?_Pn|5BU|xJ9+@Zdkju-RgOlLYXSlp< zTcFc+o#T@_779%ljIsyx5}3AJeG_Co&o2nYL}~&272>l<<@Vicu|Aj3A2x1wzXt_OqJZ z@xO3M_j5TH*W{NS*#|_Pwse7uAsu-(FQKsee=oItD?snq-PEtz2ik&R`x6mwo404w z2JyF}_W6cZi@=7gdK3@*4uI98_B|X`JqjC^S%TBjAv(N1V9zLQSQ-MhrolG569C`2 zP~OZ5cZPpAYGe4Nsa2!q{6M0%zTEI$an&dW{Q0sjoq*Uqqr4Sz8Z7a>5lzWOQn7;Y z^zb5O5^v8Ke>AuqA%DqkGiryqEsXPxe*lZn?gebT9RQkR< zXj8xs5cZNxRd)Dn@VzqVMgSZ^>CrmWiteC)qMy)a^c7l6VRwN5j|t>h6pvIuZm}qa z*ho}}1jrD4nnk`vbfb8xMKlp*@;En$w}@6kB@!SQr=5%eoERzsQVBTiL=4~ri3AA7 zSqgM;UO1JI*HWM(fS8!`VD#IG#cL;hSEmsI`e4R~_wtkj|1>`4fSkQMDgf)`O2< zH6`xC4@7kBt0TkB)Ga8hh*vo4VQj#gsW-d0 z9@EsuB-7L%;r^Xc3XtM8jRom&m*85abhC^Y{nE z^z8bcte)U=Txklwn6yEBIq7@K6>NoITM}5a!XeN?IH$vY-f(&c`xbdLuF0SbS5=0C znH=0yxH%qlX5l|J@;~34HJ80PAVag7Hn%=z6-ScrkG3szW8f%OEyaAZd2;qxEhi#d zszn5Il{|S3l6OJ6F%`r@{@0iL@o52H>cX$0%vYIfB$&H)MO+(W#@H0!_5%K6!4VVJ zVxA((Qc9Wfd_M?li8JLXFdY(_-XEHqk5MZ>V6C+sBJv^7wu_>g;1p>c3TtG$jX#t6 z7xvXd1B2t>Ef_em6=t=Z4c?ao9_VDxEIlne4c#-qEPsU(@Qr<>K1@hL;Uwhkl;2L3 zsGkF<-~q}8>`Mx3g8kbS7`5js_89pv#o*u~cpmudv0)S$J`$)xl3UQ){WLwuM~Rpw zej2*@mXl&v1UOL@YQbDAWmovJr3yGITCfHbVi2JywHz$gK16)2TG_*VHrpVZ6UH0x z_Ad&7&_QkB$|N6>_rs1DL?f?2)@I8svs!9y`KmoDQ7-}B&6b|8%nk7Pii^Xtxk4Uw zxRlrw)~)7gpRMf@kqtbV``F|Pq=RrZbA3PmDK7p~4BhrzLTGR$7LF9(s1_ad0TkEO zY_-4^dB4gB3rnkci8RgJS|!5N_@-83+v;pN8xGaktn(nxJI=octMafTTGIX(T|6u0C+iDJi8j84SAL8=pxPg1Q%rmTlW?kyhZ^Bj;nW#0#j-1SYr zmfEu)jeOFddLWQH#jV{4EKK_i7D9#GtTj`7`#DfP3**jklQ;ev12`@1#&YGad=|!? z!9U(0#WwHzj*uWexAq-{hZNeAhFg5g^~(O&XC zKTo~oV@ZdkeuWZ9M%KU@ORX^H$)Tr#2*dRllj$jT$)p(f&Qb+rAfU?4dD7=lixx^; zJmP=R5PTp>=Vc21F{!DYU0;*5<0t;VCv5*w_;(5}gfLTZBSv_)CW%y>Ndg~|o1wJf z5gv-Y%vZarC%vzRtcrvYhYlsJt+(*twf$t$vF)dlj=7WZXvc&JiWbJH?a)J7 zl1zEXv1AAyl!mcKcmX%7gT7$&^3XCixHX9lXiEZ%gy4(tb~(wEO?``MTS>CTlqWV` zCI83!+Cn6l@o}3T71AJudx5=>u@- zhxC_z*#Fbg15?ixpZb*oQv-@P=-1)~6iUQ>>Mj%Qns(R}|Mr&;l?IG4dyIA>eW)|V z->D8rWAl77j20T^9~ho8U^aqVp0VZc&}+CKc>;=l0>15Ghf4ij1XRuxU#HqX4JYFX zDEkxR|LDkB`NaG`6F5{#AGnz0P>TsTBR|lZWSX)eUc^tId~Hizb0UbBFo_14`APIX z`N&jCv3Wz-W(Y!Kgjq~#WXcm6+elNk*py8h@o??q8m=Gj1+&dyHambV#Wu#hwU6~f zb{Y?p18>Go0o-6~m*7yM;ejj#Y*luqrjRSdP zF-;h=X~g~2cu49l*Z(ixzeO(YCw~n*PCle3VeWCgQe!F-hym}S0q-Q(io42pxZQg| z+8K$4+qj&bU#GYr?$U08(gyuzY3*-2pDix7fl@1?#4svFLqqe!)2mSy{R9}@4&ng_ zp5Mb0G^*{^q{^Dg7SMmHY1HLXx_Wl^XVd`NqP@%X_W(Q$aphFZ^2N02q1)(|ce?G#o@I2?@QLS_< zSiXE;hPqA!!-c#cu;tP(H^B4@Cpw=tVuP?U6nSBc8G#Z=o=?=v z`d?S%8!g~qB=}KO&jEw6eQC46mBIyi z%qI~2R)S}vBd)=miQV%0Vc!zR1N3t6_YHt$yEx(+Y<$-6Y54#3aRDqa)=!<~_&k1= zij*0vi}m@dR2r?eM2kpe zdO~JadWvdgq5iEBgI+ZwH6v>}qQJvbuPRxhijU2VMIOq;q9V=G{36v7L-AsLVM(!S zaeh$|5-U?zXtYa;N>(C?JHax|vJ&lTXzl}7r%uR?kseAZDH|J zm2P?dVhvI%Glbxh674cWQNBuFQleU1vTS*gW)<>Nrj)4C6Ed=9Cm?^N@X}vWp#p{| z<25S^7i(1d!etr&qoHoVl6*sv9tFB{U7o*OqeU+$<6<)sR0+xOrCGIHvskYwKx38J z`P#z#MMWBwR`Ul#p%!2fN_ApFa=fav&R?cc zm1tGPhGmN&lh>4L9$KP@QW=U1(8Q;x%Ss9~=yd@hzeuaeFIcTAS*|HYlUy0<^iZ|S zG{t&VJ~Y(|4SK^}pv0F`U0F|lHoaz5p-!(uQG701&EgVmfvQMTyj1@diiUR4y$$US z%{>)LupBC5dA<&6uebo$3g!t-8<@~lhL~qdhvJl(&@jvLi&yhN9g26eWhl;HkzZJZ zs}Ch8<4Tq-GZbU_09hEn$gpIIM*Fl9)yg!D79@fflmbn0A=LB?fkj+fd~wiB9x#5H zrl2t2Rp3NrY{82B;>8+ZNt3TPXrIk?mNH$#w?Y15ZHZ2&DuDDll%!0{*T40$P*sZ; zYal|Pmdr;CXdkCCt9Us`p`Mok0SPhbnt~G55^c#c+$LH*BADr`^%@<3G#W1?X43PE z3rd!a7b;Ap(*Sd0$45rIK5-HVu?oMu{vwhvGYg?9q1xWotj2Jy2G}pgZ@SewXlX<< zs={Iw@?>y(ASqK+SgcVY83U4H0B*piL6r{_3JSEi1jvgSHy!Hf?Qvk)oH3v$L8sAb z4a@b&V`Bm?04AD{lOVLPcw{oaW3tb~`u?C9Ba|wJHbQ-|&;;|wJVlDXvl7dHi6(cP! zDb{OCipEb*Pl!!|92bM^0wP~nZyxP6jAkfy4{Ut7`T7J5=N2z%e@pT8u0l?1=RffC zDcrLNG(Y~EAVkGw&P>cu%}$L^Q01uN6K1EXAgE4ENz9m;5buXV^HDvpB^#fJ+Z zHFRp|--FSg<5Zb%73x&*m+$7H0E9<%Hw1kWm$4XnVX-P*qbn&g@KYM#;SV$}e5`@! zP+S_{W2VHW;RTJtI~qP5n3|jep8S zrbfrhv;HlON?lR}(uhS*?V3|{lfBWTc$_{qE;BJZVPRVAjD!_+ z68%nq#l|g6PneOIk(rRLM0%*OgxGXG_YA0!gcLcdh|i2qkDa@4dSd46*fdYHIX*5m zO(0S)L!SvDA+lbAzKfrcmY$fB8F!aPb@7?5fE4}2=QcMnB|deoKe`y7otU1P6`QOQ za#3X@zL}8WkM73fip!XtnwmKiN2Ml1`_1r2@&q0Z#4;09u_=kOV>1&|Q~XgV4~Gxt zMx{P%2QvauX2KNJR8=%Iunvp2N+kp{pc*yWyQ7ib9j}3~ zD&sAfuXS#u*(EUI3!uA#q&l6%4$&Soh^U$zC|n5PZw1S*?o-Gw;{+x;X5zaD?QyO`Roi`d*BxR=8UdT?e^);xpN0^2H$e`yz$5-%E|E|Y z$*aIEjjD#C;1R(igj0|a2>(!*aU>2*4s<&44|pb`W#LH3wEw4u!1)&OKMaIFQ${~~ zNeE&rcmUCel%Ufnl6XG;f4k7WarinFMxg6K65U90FZv#Rhe$@ocr#wo?quw;^c^rS zM^$q?Mevf0sus9`Npks=AZ@ zki0YD*7Up6r2v?Us=z589ODy6x+<%073*1Ih31_3B=yQ)n#AHv7#Gdj}5x!i$ zPB7#!aYFTr1kWo8E%lViz3^)ev=8tpmJ%dn^g60?4)~1YiPeyZRw|T=^y#c^LydXLrgWc_k$oyFlz%5bAP@1H?p5lw&TFt@grY$42gR3)T1BJcgyNFo zp2FWd(mTm}sdt(8U%cP--t4{I`%CX{ybpMD-gmvdl*5!WlxfO5<%i0@D!*2?DQ_wt zDku0%_L=EZ>Qmvf$>&F(Gd|aRhWUp2M)rTfkI`@P>M zeqZ@j``z-p?MJn8UOKv<`4RE(5XR}2i+VrIABD;%K>i&6a=ge zs0`QkeHCK zLT0GaRJp1}s--G}YOU&B)n?Tm)%U7;)p6Aol}+_TB^n_e@$v}$6>00D)`PhXxuzGVLy%;q%XGQDds5f)|+*;APp;Z$9$JU7WzvPH>Ww`;lLAhbM zo8Lt9s~5hU@3SOhNqACb?xNfWDI-&pQj2njmJj~R>KZm@=!1Q6KV@QQ>} z?#*PFwX_(eLQD0qaWnnj?>T3+LJ%iu+TKn-ToMf0J+D2F-=1AgpZ&4d{d>d-a53t1 z-QBv|1K5FjGKY&a2!k|`2~1TCud=}VxgnCkd)#Oq0Ti5nOy~W3*06rovi6=lsX%Ri zk4JWU1H09Qp7eukPS1PChdgmg>YhQb-gE{o6cSEhF1%PJkSZ8nxaS}uABKY=%(E~J z7NLY#UIj@i%cphwpuSAK)9!a1QZ(gzsaN-D&q5@PkwP5x-lDESXtO z&BE6yxZ+wOKaI0Q>yvU?eY?}Xe-A%;Y{Ovq2Tf25t1!WlNvh()3Y7UpMxcZqIgb3+ z45f%cph)d08mkgfv+Ec`^C@Ipsu-=vpDV=-yG5oeAa%w;oMA?Yh99Q@BY%dE_nyno@ ztw8N~pZ=IB<-ew>{k@~3S_SCiDSsUAa{)M$ZX4s-uxi9rM)bt37ZhL-fE1wnlQ9ezW}%I{XhqTz#4V(SaSr(o4fzE}4M~o{AC`O1OE9>K}L8 z%t9b~(dc%XR-uLl?cu~th4-_CzQ1S^LRhp+iry*MoeH@4w%rOehWVszJ*P|-VaQdE z0>}u>g%fohD^OE5?i(r!FAf%|ic8usQmzhEVT}btXVA1L4{~b>FB?Oxp3UfxSBEHG z#@7-$^M#734vGp)kZrE6E#`8EIRwiTvIVeSXvbpC0U$b{7YTmT7{1*t7IF$_$U^H_ zEy6D?;;w|%sPA?xt#gP^g#_9H3CWlphADZ?L-(yGcUdp_?-6umMC_XC!Gj0d|5|}P zKBqQt8iNI!z=~yE%2M>$Xas zYa-hlxAPXv3)vT03PGBHu1g3a+BL@a@6oj3vo+tN>fYOeFH$#X=?Q9IC{AqTqw*&W~7m*)I?o{j`S%l)& z(ALi@a8R9T>Yw5umAb;(S>)xY&Pw-cvpf(~2P_l~_7$$36c^^56oSzRw{-^gnKQT; zmbYd5ELPc~9J%^kClKKmpNyPpDLqJ#p94cL7Iiiz$fNM|ZbK|mUdAPl0bPs6jjX14qH;$yjBKY+;p zBji6HA?=|%p<;A>V~l7`uSYVqxfk zCyv`9p#A<4HDgsq9BW6gYcSYK%Y5_~ryE%oOCmo<#e(oy9Wd4%j1Y9PtD*$MiA9`iud^I*usB%flLVkP@RR3nL~|f_91#|CmqO(4E7> zAF?f$&DXie0x8SokA##eA677@5pP#iP-2z6XeIvryyl#vt0IKDnITF&ez~yX{aX|7 zq@xC_BflPke&fl~ink?)G$BO z0-4o8kFNSjk0gSU_^lBb4432Y#sZEtPNZy)(MzJ~)p4KtlJ>Q3_z zCh0bfInNq8DajZp*;f;Tb^gcyOB%A2I>aO=qW|lH`;W zvWRV^Wq3nMe4j5cuU-5eT3@Y`h0ZNZP$=MToHBToAgmst`ZpP8jMhdUKRz(Ns-3I) z8VGudkp3utLIg&6aw8|aUy}%T%HC>_@c5r*EL;s8#L$*-(!VlvuHVg1sq5vi*1x|Y zkh=1k$M0q?Qlm-2-1nGkRI%cq``wmv&niFP1?jwV@^rXap!2eRN&8p#%`9L0%r+>` zf{D}=t){u6W>_}~hHhhuVuO92L-@6#Dfu|D;9Zq*^or^WM5I)XXYV`OD+B?v6=8Dh zgF8yBu5$N-HS4Wc)WIXFR}?4*LJaeT658d>J}z>&2v;d|G!{N|1=fL`X`lMcJBM5c z&hjNNEJ3~0_?Yzgg^91tUR_6^;F413z<7_+#O7bU z?(rr6;T+ZB>TPzmU3_upn}FsLUA%cuxF)8Wh~U}d39Azp|Bf8Py+}}jnQVA+_u0s2er*=P(cGe2cO0~NPG|0t&Nz^`YmaNK zYYHl)ypNY}sQ(R*H}Ux}c$M-_A=ffA(LpwfjJ0?3YW26o zfmQlM8gCZ)5`attsC6sIe{oPbhw)jVr$WY*1R8V2sCLF-W+n#sthlEP2rdi2yB{F-Qi|}7nIU(v+&K=KCwQA=O z4Fj6#^~Cxf17JSyNY%KSp99~$ORLJ*C?BTJ>tKQ^aF>vB!GHM1z1&(KFE-4QZQ|KK z?^4CqKKlN7VRFKDl<*)Lnb$YvdDac!?D~3X72frmcH`f`i~g;29vmE)lw3`zV_5b| zsojWbMgcC-VnU>!sYhX?SJ`Hk8sb{em^Kb+oJ)?r5xtzJlWnp#IncLksdM2pq%|Or z8RkxuC6ngLu^@p#YsB8qs0%Q&z~{_gCwT4$N$WOMa8wS644{0ZAJdJ#;qB7T{b4`F zL^&r~?=t0#LlJ6TShYyEOQ+Y+tUBsCE6CkE?ot6}g%RHu#?K#wZfa|2Bw%dzsF##( z2-eZA9WpT!^;=%YkA-d~3$E7b++XFKxC+wA=XW|VCIfafSK9}bsf;6oNw^s9S07#@ zmc$k;aH+$HHEK#6!|`DKqhj}_^-q1!`ULlX|2J>0evAiz0053a|DR)}tbjyR9IqJ? zKibgFrS)@sR}>CH3=#&t7>2M|GyK2$Yiq~34el4&PhdL?O#IbD1S%m|OlDwtxX4hw zMS>t>*qPM+D6KpfExQbo+*~4f;Nn_Icz)9cghn{3Zq}XO+XfS`;!NQY*R%1{RrxJi zEH~Rfu~P}zm?*@Ge;vncr6nPNKO$v;FFa>O5IMf-0u;Fmr3rQts-fz|nsLP8ydfXA znSCAKgRf^7mV*$huhUZeBCkLec`v+xoZnRVLaY|-&HZq7KscmUN`zx#0OYu~=(m85 zu1Q=tHNAObo3J@^&-f;-^iZi{Fsx5O*n!+NfwJS4rC33BC%PxqYS=<3bOfkOCpv!7 zDc6GJAGl}e97D{10>%_jflHG>{KmCzx5#u&pBSmAw;7+gDX@`?K|Y}0+c;_&SPB_! zylO#A55!IWCOTmf_r2?^{1MHJQL$ELxQ#EDD8K%+0&+7AY_MJblT~wZe+nY4OWJxN zzpV7;taOnUI4YJ`B%(2OOYYdg%*$$M<0*~0MJ4J$a%E^hGJx`8U+!byofErElJkrw zxrc(e8Ao@p(f`-!a~(C1`^4q836+!UioIok zcpcjRi}#T}L;b&tLc1In6Mx?;-K+!v01gW9e>PJQSs5i^A#o*ILB;=GH2>8V@AC0X z6i%kq+LApH|B(?Bz$?W^h~%Rq&?gYY1B1pV5J=Gb!wU^PVXT&H+?L15K!cb+1&{>} z-)EfGIlkUFajPGz@5cBZ3L6{<@#hrC9vuWlU2m<#d_~_E=1*$(j^a#=V@U3F*A1@6 z%}LUXn*y&)Ryl{$`C^%(@|D9vf;1(%p?c*oQq=aDe2gsvVm#yB%Ha3U&$rEw&2)bW zYgci)2HC?;;-PqWFU}qqe+lzRD)Kn60Re$OeA$A83!-4oBAIbqQ|a4q z#g0~)q#z$l`6xi23r!;Sc#8j0Ro>yNHj^zCzlt)X)#YT2e-bwE=v7WXMjq%rlk(ta z{t_zu5UQMjB(z%mLoDh@s00DydM zap}Od6tc+L3KzanA{?m!1jgbO-#2$CBvydM6{iSKk6P=j50P=jkCD(8rm+Uk?AtOG7OI5VCVXD-{g*FHz+YoJ(%|JjVjL5J^0(>pnECZ^d?Ko}h&e!} zu2IT&s(Xv3Efi{D9hHS*&V(T~Ta?T$c+51fq z{soT&hzvBFOa(+o2OcAzCnD`khDT2jF^QBOYza&tKQbB*okT;T1xy4QcVsv)9E&_K zn#4%EYZme({aqpK=zrtTWA+gN5CL(rq}-^`!5FMi&XwpBDjKnzR2I<~i#Cg8!z3`_ z0h%O;xMQnDl-_WM4xj9fUNDX-BJUZ?xbp9%x;&Fqc+`dkmRKBfAS&$=2^X$tG5S(p zL=FZN(Vp19kfTv`R>f-hLb{s8Z5F_Etl1s<>c8K^WcvWt|$9vJk$fd_k> zp6cxKceJPxhBH}TNlqPttd5Y;WN1^c;K~r#YTU@5+ttB8Z1mDI?8~Dz?J<`! zQN+%Pw)ph;G{20IHREyb>=m(Zo?T8Ed+198^$pS+M}!?NeWXjw-tsyVChJN~sjh>N z(g}=@0A$uU+a<{00DL8aJJ}G>$>3R^knVG97O<-Un0}L*0pUe}6t1!QD?Dt9JHZ2+ z$V%PW@$ip+D=E6#{27G8hUuA9TG>lb8phq~T?%Sx{XSy=YK?=xQn;_lz*|H{a0g$$ z3^~aVho9cRF+&`*>2mex6Zs+tz}Iwkx6lk70ij_Ik8oj=cp=Xi%u?O1G&xGb$f;(V zlS9Ly#(b))nE8dU&+OV8aB9kTnB7?&?xlbV{-jDL3r+B2VwlMc_6;uhov|0bSH4$= zigB5|5HFWHU;d4Wq*p<3HHF`rjDmI{$g7M;9R;F~Fj?y^miW*({-cz55AC zjwPS7&BSL;YuTj@PR7JuHuFR6LgH2D^5p?$T@PE3r$Kcpu@l$1Kff|c4rWn{z zOR>971H{3l=K5I;P1`2w&bp4Yrs(t_i{;X#TM10vVFDZtn+X5#cJD5~u^%wq9xbZY z?PS{OhM?qnTbu%;gzU^J;+Op~6YjMrb*7d;2Uqj>zCu1U-c4mZu_Ej*1Oq3YN zeOJZm z%$viS*HWwyL((3_nn!~wwg!|ZgK&T5Si0kFP850qEElpGC9Ht!u6(h5v)0$qpBX63 z=OwQ9BVMd^>cdhzV_geqs zHVHvA+_QjMoV847}dhH=8okCp8`T ziOqC)^9Keu{~liZ8}_`O15O0NmY2~s29YNJ-VXbv0gdo9&;+EaV+E1}-V*d{UO;75 z+!{2?pD*VVP-WJq;Wa|W$r3bcxiYtbrT=sqlA}tU-&C3MwDKzCw_&wo1DYk6GV`Er z>sOiUpf}~#8-!~Dsx5Ff(b@QGia4e{O^moiIbR@DgfN&X}a&)fI|r^DY}>T3BXyJ_fRh&eW=2Ij3z#2sG#EuDr}_oBXe z!;`mTAFG9u#w$hJj%B&J^-l0A9Fupky0x!K`{QpD<+@L)_T2PU__IvMz6ff^zKxXj zWw^sj6D7^oNOkK{l{VnzMzFSB$_BEgdW*BLT`6$z&=uRjzE-4u-=$r!@Cvm^r2ZV> zz<#p6+UB`|T5RfYvci?WCfUFx79~agkco%g=s#MdoB4Gv^78RrtXCcsfMXz(dJp4U ztI^z{>WSPXSacz!=5=QDLM|_>ZBVTazl&x=D-k8K6S;#g7DMeulF1eDtGqYg3zz4yJuUQao51A1*>po&A@*yHXVu4G&;FH z{qkq)brXKfR{qvhnW6IIoIf$Rs7zk%DmZNVnH9#ZE zgP^vaxRg(AAdBz{>%f81YGg3gf)d|#m)ZEB80;>_;zz#;J>-Ydz`J^()`B2 zA)`e_AObFhOlq@MlT3Y(ckrJ>q-{&qasAGqH;myD-}Lx!^#16P4dxOBg~I}izp9F- z!R^x-q2N7`x+St_Dq{Hs3E)IW!UNzj>-6c%n-Q68iFrios><|^W&ncvz5v<)^DK8Q z2{VZs&SCCgSUu*aw)jBTR1JP}xtY3sOq70|nW@nK3LTLB2i_u|V_G)GP$i{_2Jc2Q z^%{K$N>1~prG*WGQJ)GBX$1_K9aK1wm)+ag^q=dEw0nuwmrkjF4;lHmznJ|Sk zF3B4$kA>D^wLt zY@^;LZKc+h$UjrX&;X zvo_q!M^B%gFn@rpskiY83KuHFO8<-r2dR>U{oD>#G4ITKKs`ZaFkCCKa*E?^ac&SS%p zXz~xk+H$a^X99@<7hV*WRZ6tC1gx%vBzVWBGyf@Mgqi@5Tzjq$D4G1mrs1 zHM8gC^Wlq@;aI@q_C>@V>l?y!D!(#-Zo9~-Dr1wSOE0bv-#nV2V%!jh%|mjYBe|F5fp4YR~yo)JEIg1>zok2@qG zdm`=_{){3v4L0>`*X$mvSF4vR%dv^yy*q$p3P{EszyDq;R>vr|datl6bESzX@`2w3 zP%kf_V2l}nHdlqTYZR|*F-`&_CqXB;mg{ff1@wH4?K~w`mv}(}05xb@3c$qg0K7qK zfoc^&takG^@Ml(d4cN5lUroKuTvTfxphgJW-&7m5%{S_5N&VA-3ER}am( zRd+&JaT_G^j!)p89Ldfai6na>*<#rW(E12b-p~pp%tjJjZ*Nk97~?<2!8zOOlH_}k zy$iBd+>wU3|1~YBnTjS8V80B>A_2O>nB7r2vTQm!2l3yvTQgrF}*#N|hwWYzM4UGHKvW+is z>_MhYP~>pNleoMM!3!vn0&!9=b7tz&{}*ElBgCrkx1PtZ_J0Wy-&k)mB3MD*Zuc?N zrE>LB4f`lvPak!OGdQ$t?wBrcHBdF6HNd*OBNJ@sVM1u8fRP7rDq#sA8tCO ze|M*tsX+*8)n(o}9D7$EA!#&Vsme*oL`jAf6_mvoGQc-G*o6e$`c6Fc@S<}COv9^S$lwqQf% zcRp3g^sINLnU4(9h&VJhA9NARBXHQaFIF!=Rvz{iL!+RnnW$>;v!WYvhV^aZ!0s7d z*G@pB_g|KG?m$*MGMjz6=>?#YD0qJ^5IQ6}XgRonh1wUH+eAX9P4d6sY3eft8-%l0 z@G=U;%BgSzS%opl8e~F~A#uUxv!_nZGJt0&#_PenVM3L3A84xMaZr3YYjK)*uWu*h+GaD%M<)gtcDdO64$4Z~QN@okT zg)GNlh6FQd@MS6N3$N&;aau+F9ck)vk!?-FIG6ma`}xMswM14-H=9UdohR1B6~&1R zLC2HRqwT|^`KHdcL{`<`>Od21jh${n4mkG$h;b&tP#kV3 zMCOOBkFo1#gVty5pklm&SN~~&$r*~e>iEN4DI!MS|C3-djzgA$t)XX6Mo559N;yv$ zsF00rVX~>V0KSk$PO|{F0^nu-*4&tYikipyhQC&31q0snj$3dj;^lpnvU; zlM}sKf-{&?D|UT=^25VGBdg(0N~Q53^4Lo=Wu}V_gO+cfwcVZ4`0Qj{e%V_|P#o-{ zOUj8B(cu_S!P*@lJ_n4#Z7baH7L_$N|N6mTjDrO^k6X4lO^YQtJ(oaEb*|r@GFfr> z>bQ}XlFMg`{=?%SMUGQY0IDx$^wVxzcBkQto2lbKz*|5~aGk->mtf zr#w!XnQc}@wh~}jliOg3yYiRM&U7t(we3UW%;4CS-0%f+RiprYZk@>+p@5YzNuigh+gF}M9Qb=2lX)yxS;l&i!2N92 zMCsNUx@{KaJk^LCiIwx>G+hy0&R;VVNpu7x_>^N?74V3ODoz+ajEtYzm|fP6@W^r~ z&bO)!F}_E5=3LMTl$A4rTbp*F>j1hN(3^Od&84E@P96;Rlf~3F;{hJZfyqO;+PbJ2 z1;C+!5!I=D6VwzmLbO8+*X4^_13)4Nau`gHt!LdK929dlGf#>e9=dujj@wa%ZQG8j z6=hCeBl|$k7CYv=?Nb8;eR)G4J&^aHz#?ydV(Acj+Eo2DGmR9=0H&bQ*nQc7&V6c? z4KL*x7G<64($U|F#Ew*HSB4Z@jfOGlP82NYI%}GHG4yUtG=P)+V-ZShEd+9iIj|Jt#8p1|neGt8+ToV@bE@S# z|H_luj={JdPU{95xxrQ`SBcW>Yf%Vaqo^KjOgS=jNK)~YHB%wko2p~$P2psZGQ7k^ zZe4b9`h0C-35xg=J_PrY`>*+tDoZ}-M%Fqz29ZctRNfe(*%3Vts8U4WHD_Rmx1_yn z{&dX6U28?DVJu+6u1?~D| z*rSP3x`a<>hzsH199Xbzp}rw(`3xR&ojMTOyoo%bItW zTQVetieBw+7LEM_rA$@)=u%a!QWZ;lZc-Uh^u|36Ue=8_Y?F)F)Ars@$dMC4Jdj;` z&_1IHq<3DVW^fo&Scs#_u&O)Y67qvloA=JwFz#ygY9vT4t;ZzKumv{E9Cw2PQF=LnmJcN`^{J6%DppVXuKl_RnLm%%^b-Xb+CEnlT*%#5Ppwe)^se&W;i&d*gJXo-|8_Vs~VltaN{KCl#-vcOA4<`I4s&h*P&y0 zL-o@R?$R!t-CmXG+%Y58i|}C`-&JL>lU)2IVQ4F*Ef3dP0bWs=#hq0*pb*5_KE-F1 z^Wqm=T@90q2$!H8TxwhgIZi__&j>sB4(nAdkrd4Uy+F!wliVCD4j)` zLkyR;^*m12A%{xLPLZfVO4iXSHpw11Y5;k^=#@Tm2r4>BaYC_Ag#(A$p(?%NHXBU$roo%5%R}sz@ZzFnq;q# z@c%3x#;Ud`ns2z>^gp3r%}gp`zNEfeErIZ8U0y6v(`q3%r(1Ak7{}Ns%eE+?vCQ7@ zpSK*%e5>lL3K7NCP)5e!Ndajp?76-m({228QZ3L)+J#9N-^QFHTh=*v*RRjBKh%~Z zrEcfQ>(xyNS_SJUi@LCArB7!@dQ#uy$9~JL_JBR-Oha)RODT|#$qaJVk(@k+0sE}q zTp;^nfi!~rW@=EQ$LgMz{*ZT)XT883#oK&$@dA1&h~+NSj^(z?lH|DFnhHJ@eE>Lr zY>T^UsD153-TslTTY7#FI!E>ql@;R&^u?Y3avwS!U!XTOrCXaKIv|KwN?~qp7Y%&!&mxB|Qo>i>+)=yy+ z)Pt6^gX&~fCx@oYY|GmT!#z@TWX3Jc%dQXP0!|10dIlkj=2B)&oiEcmtAsw53Q5z9 z1yCD~{CY)G%%d{VdB?L^xjs?Orzy_Tr7HPdK$>LoUEy#_ksY~c4ej)3DZpx*`9=vN z5=TNyzPaOs@=M{US0m1? zJ}r_*MTeo@W=2D1&iS&21AMSgvjeJLE`gp_SeJ3-Z^Y(hQE^@^rPw)xVqvHTEymDO zT-}rnHp0&M-RUW7`JWJq9`cx@^tF9+_6f-+8s&&^2@|juTMmEn zCT=V+8bIR@eZ-xR^ecGVBOz{z-Ju~I=Kj7YPv$BeD(^jhJYQ@GKrm1+Af#57C{L$j z=Eh@2YM#w}Fwd}870j2d)9J*kRlp7U$KFfy*X<3K$MV$b#18%Q{g1dIZ$DZ!0nhUg z4aXDKLBAVm{UHG#y@X3dZ2@LtRd9nDn9H&3|7T`ES1k;;J*$ zU3a>CNxw0DPVCs9!r`6<-b&|A5?Ltj(0j(CkX=b~D^j7?iM9pWyi9|T=3ZFpT2s7! z_iiXzFSUiGZVw%Ic!aEYf|N}SUH+QNZUc*Z69SQU>y|O9mN{gW5z^L0$z6idYLtH^ z9Twl&SyelQETpw}q5+@t7p^wz6Hx73s{?=yvRPFwyGMU#W^x>RK0mMH49b!?}3EVuU(SW2FnF-_p)fw?(Ayi_>ZSbWx!|ablE= zPf4fP#lk!jU;xW?dGib;pK|CHWsXtTHG9#U<3OkT-Y6j*>tSO?%n6_&@=wJq!tPP=7gA!Y7FWgH??F5p!HPRc} z|3YUOr`kTM%zC|HZ#Ne=h#nME3tv5#Ui*N-{S8e9MJs4OJJr6p)gGdA6UWbbq{`0g zMV<8Q5Nzek$v)s>W_~RGBM>Eer2t1T%!0N#VBky~TZh%-3?LMTblB3)yBlSl`ZkXA z1f$R)>cS(N5`3lgR!*Hc`zni<#qkZte7;z61$@y`n}o-2xs5HnECY4XGVe01=0dC8 zbt$7qv~yXIZ+jQ0K5o#GJMaLecNmvMCqu41F2y@x&=OIC1!#Lwq9SW6$^l9B4{dOa zntz5Cey0()MPA|*O?dYgH^c4Emi-$0`ZFI$hZKQ6?0dV`Z2e>0POliAn zFU`1aAgT8D&OPTZ;Kpq^Swy59>D$$iiU?aDa0_{V`~dm@ENDo2aLM4|&;;D@em(tn zQsi=4@O$wjnDcotmrqS|W&BPev~4%kC8f%-=m%x(tbchr_QYU6C+?cvBoT=|v%5h9 zP2N?vd>=!Q^VgwOHzbcmSO4y!`}@I|=w~7_ppN|UG-ys=oX|z5CyX|1E(YMcbt<4@jZl7=RWOx5 zrb6LUOczB%`mf#}FBd9~8|m`r`~1{a?P}QrCGT#aiAh&gvrQOgjYrkw*OSh6VGXNr zub~e^#I@cp>5Is=oC%)ZuTh#B8e%TCt`~TVvY-@(hXw)fiu&eO7KfPh%h)Cs|hwlx#h&?CyD}(hB zI*31ule&mEc5{~dcP3+BaTOgagEwuprH8!Y=h_!Vz(&2NU$ipGek;l~c>+zu&;EfhKm``r_D>Cmm9Aq&m8(qtbcZW<9L+eTofBUFy4W$qM;K= zx*u0BUGCem(e+=|9y;8D8_*GNepp-Bt0EDC8Is(-g@`Rw_ek6cNQU>{(`3iA^&5>l zC2b&vAG!K$xOr=VrJh2pnSakU(@@juZ12sFJ6}??7eSjKQhMI9L`oIzQSK>k-GSZ! zmxffjgVK2!EqJ1}$%T&&+^2G!wj8pfwLNy%6nx6UJgQz{J_^}1CC3ajjy*I?B9n^# zJQ|9g6PF{>c>6=&^l>Z^ah>gxKBTT^#rG8flaxeYlIj$5(8*NDZw1+*WHc)JE>yeH z27A{NWjiii%^DTTaqX3RR4ujUJQ9HDzG(oZyMA zMpm>0H_Krq-?C2ym>TcZr|J?R-+V+A3Y~Gu+h@2c`ixiAQnV^3&ZVZC+TYFLl+NgwC#En*Vahhvz7&3K)T>Xo9Z%3S?^=}?kei4 z+;jHPI%?dSR5`tB|DrEdN3`KN52Uh@4_^y?;0GQ~Q=*T(Cqa9wOCme|bZe@emA_&4 zwHB_W!c#V(`;pNA--ENez-JHO8tfkLXcd2*RydZk1wP!XXjq**pmL3B_X1wW@hxn_?n#7V zMhO^_R=7Pniv3uvuZoI_m^1=}EP@^;WRColW0WwO)+INv(U`(2pfEh$|e9kq7D^Jc7U7epk|^KJJS%fg6KuB)$1Hs_hQnxKg_}kSB8Z( zC`$dRWEu3RN>%L{cOJjv&;#~+4S~45pdwN;>PVTP*_q2ZxM12hv$5!Vt46-vp>06|I{Nf(zDW*GUpw(GPotZ3WAPtJmOvNz zOb}-sO7uh}e)E?;Zq&vs;qp^-`JHMn?sREZnbD>2hMtJJn70QJLwp76==s zvMZJNxcH-GAkv1_u|KrSt6EHdR_DKb)vpSB-jGJbrCPdSYvI$gk`pz2gisdRTq}$1 zZ0e$MbPJ*ZrD?&9UsHmGZG{5HwGWK2?O87h{!=n8bKsw+3++HUREtoXba&F#Ud}sb z$jZ_RRGM~iq@Yild;jCuYM_#{R_Sodp|wTD^O(}sVRTAhU^E#K$2d;cVYu8a{9>|c z(`ed2!y@itX!*&e_^J6v_H$;=g9+AL#7};Rclb}@kTejnyb>^Y#rMPttpNfRIRA}MS{+H=Fb@KpCn>=v8{Hnt@xluhaeZ{`InJ*jOs6sTCS}R(m)UM7O~|ku2tSLJ6WZ_$_*Y zCOnbSN_yhOL>l%N#GsS*aQ_YmrOmBS|A*`sc=`it(#k86MB4fZD(OZJ9`*Ea|9RBt z1)UBhD^;XtAh&Pr7{p*Wc1a&9g{B63imQU>74;;RWVVWT(8t(%1On8v7&2+cfJOeY z`7v=XDrHiaWLH7zy+dLI!khzHV{Zp&F2d*V(nw-t7j-8SeQ#rDg!j4>R{|{pheCRi z)FynEwW_D|q4ig;3St~WMcj}?sN|8fd^L>;`gx~+$L)t^;1&kk3LfEuL<&tu^GB5ISo8q4j()6^QU_31>tz&5$zbdMoxm{w@Xb- z2?RD!p)g!1nfmkhDh5jz7t0=KW?z~_XO(*#O;I@t^o!COMi;#jT2B(kkCyspvTk8S z2Ak7iPvuK2ffiZ2mLxUxhb@ALLxxl4O=_r0=@Xt!_#x)O;vo^wvL&_Cz&dQfCmn)# ztoQrav}@o7Hd!Kb9*I@ot*S8zfWPx_$FLg$g#%K>D!fyX{mRdR6APAjKDt$}}_ser%qp-BF zaTP^_DY{K8S3J4>NnXU%v`x883~F(avKFr{k>|T2GC|Js6OzrfrIQS?{P+Qka7F8> z{@Nyv^)6V8os98}eNDXuT^<=)U;6<``vKXLdkZ0({sp{MjLlU_xp=JWEX~%L4OHRD zZ6R5^y>1E{NLpEed?mkOKU)iHO6EpfT*Qe{o^4VJB?;!Rge2&N#!toyw+n(W#D=A=TsPf?RE)2~FN<#i>l^0Tt=$D*hC`6$X$Q_gpz8GV87i1CTGoh+P(tl%hLPH5l8>~R2@Z$1ol3q{m9jI z%}Sn*o5dW3}4oqxEGb~ zhBU4uuSaVM?-cKhoS~=ibK~C21|C2J-v?Ps=>}K!oM%FyPOs%Zvx@Il!eOB<14zE1 z&!6^OQ}Xet8GwI!PVV+(nMZqz)9~BEW&S|mVX7M~xBY5y#Oji^5|en10S@g|9sfbo zN}wyxeCvk&@#b54G_T;H&7o?&;&u_u$RD?2p{C;>OoZ!>i&bf3jdlLYI!E_QBf&`5 zu7r5+&NJ5Ra*^}tX(G~38S^2#;Lg@)h-DpHIp7O3Gx)6^w;pTc%}Hz36a*E3OkfO{ zw;!jn^N0AL+HrPnAN$k3HJiURS?!+J&pB+{O*`qUqnx3#?)@cAEafZ1{%ra}YZ$?_ ziNeWiU<$FIxPVLDh`;JFW%f~dn<%CA^E6cvd zBcoq7b}I_Jo}{?$ba}GGltPhkfAekrdb<70oWv zd@h!IWxMj&DXO@cgi7~$X*E1niUxK{xA_u0_0nFvcR9q}56^sJKGtPv^pr<~kD|t* zgjB!gSH?V{?jX^>%bi71dpeRm)UOPj$j+Ox(tn8Hh3SiqH-*m#dD|In6Gfi{kbW1p z&%H0#_V7C!6Nt`hNy2lZaHsaVInH+av=J%LX`5+d-=S`*D3t)Rk87jUNHh^ZPiJOC zfO~QB<-W>-lH%feuS1Si@H(tDeHvYYXV_h~9ZejcH8IM|s4!!C-Qf5S+abNlv^`Oq ztDN}24zy_%eY_Mo-kMt$Ce9ARMS*R=h~xPB^?n*8j`^Y-f*Q3HJzh!aWMnCq8;wqiue%Na=v;6Fwk4W8^1%VF+fx{x3 zVj9xCfInNLnfD{oT;GQsv0YC+CJu~a zIXnoP{_@7lx9mLKlU8Vm1YCSaBTN&ixo7k9e)6sthI~0=St>X>GrQn)GNY{f!Yeb= zcW9jW&_t!`-}{kgK74GRTG|QA3`gdz&wHmti!>E79IuWG`jyKPkD?iAEvcnG-$weW zf5e^l9-$b0?-fge9~4V$m0c;GWarr!FGDxMUd9_|XrZhuGm2>Q*u(1%3eNRCx^L6T zin>U;(@73N=JVYYG+uQ-j(iv-I0QJrIDIWFy&qym(z?cT%a&1Tn{$pw3QCIX#!#vI z*<8@o=RDv$7$h@AX`U)ZDAC;f7!IlfHLpDP{F-t1$>QFH_1I z8M1U@d3_o1uIbbmnF`{QC8W+!G_WRSufd;yr-bBY{;N<$XfPJ-G8mt>Q6c$1069R$ zzeo3)8QzSec{}<$h2lik0mep$y5ED$NaTN@{jPOW2)Vndw0-4@B3V z*_eMu`h42E7_{`leM^!GTWcH}-t}1uTWTZgBg(sxf9vZwvmV+*lnMrA>>m~=7=k^* z&{SnUt9OseNKULid}aUR+2WPo;ZrFF|I~Zs`B8Rr%^#)AK^YK+(9l%rNh;)Vv{iZ2 z!0ffnIZ{cUO)Scgo&-YVvhqx}@^@K~`1cyG=4XpFzrof>a$Zb)cXBjs+J$cpD-Kql zGb$s}I7gW3Xq_tV&m5APBQ5WpBTaJW{&Qv`uI}JKlSc3QuLDIp)7NC?XDCBy)dY)S z+(@NX2uoq>l0MP&(lj+D9f_uwY2j%4__Rclt4cD3@|)X5^vjo~*W*S#$%(oDOg7`k zUl$h_-l_TKFx7upT`@!X86-+1vGqlBGMG2v zO3CBoFu`!Mhz-eV5MxAV%?r&_9c|*AjOgB%(i{K6oh`Oja>>}V#Gzb{?wzS7Rv(s` z^V5fASAD2DLoq)b*~iqKxAKpvOCDKunl{-_q~UK8*t_aM4Y|mvSjJa-2^k;t`xNb+|z!JhV7Rc_ek!?Fz-kq-$tb72h*km~`&l*WcX;Cj8?P z(>vjHso{tF=64ncN5RYGW+`a{ly+fKEkcFO*SGpaq!cD?c+-KCKxKOB2Bk9fEsdhe zBA9OWOTK^dD8ETrb^5i$^*XCtZ*fPbJ0D~mbTT0B`x7?}> zO_5vDBlg0UpW}v&GBRZY)#^CDY`iZ~NvFKl!d~cBFUKc8H|Kw%Jdm=1M16M_HPga~ z3wXSkj(u^jWxb@s4J{29l*v6tueyCKoSAt2*V63`iLK!|52*?_(o5woG4l%9XI0TB zHz>P$OsAf|AJuyGp}-V(53r+DTul=yFwV4|vgDt<6cOan({+}MXw-3UUo>iE58B0I za5^?*Chi!~S|g4)@S=HG*7gh6W^71QRcw=KRFfG+brDLsI1n>Z| zU7h(D_UrE`3zM|AgxmYD!W=A)S$qX7Z9g1!*e7ISMFtjwjk({pP^EbY0pXIdfsJJ*L@c?pZwm7VmNVwvh7 z!%Hf47M5ClJzyyomWu!I2pfG&IeN){esh)P&D1cyS!TPnTvV}m)=zsk_dePCa_{7f zhcbTM^S8Z!k`c@(>NBoSTE@V~2R`nZs_e3~jde%c#=;FhHifZSRjmydJ(HDRTKqpx zAscmj#_EK8v*NW(qphvQ z2N!_|7s06fPpTT8cQ>3J8g1&UeDtS_0=CbzRSx)44vfWKwSDY^Ccfv*Y7JLpgex-+ zjI|6lDM3?>5O^NVGn3H)7TE>0Zav7uv%EGA2$M`&`B97tG3Z(~_%g zV@-+5Uz=)N{@V#P7yP%aFaFEw=S}&?{Xe%XdeJ(j{^zCyuW5|(xT&Up!_oRHPt?QU z{qX1oUk~L$xE>nLD?Lr4@_yvo*3kk#@o92-?p?(0?m+=FIxB+HioY^=@)Sk0;MFM5yiOhOGO*%Dz-@}q(0 zMW9(DACIai@mZB-7I@wn**&V{>HkUCy8uLSo&CeJx7lSE7G&3*1#v+|VuC>f2{9}n zBHmEB8m@|c(>A@QeV18D6E9;nRd&Y`qiJF^NmZIQ|J;g&w_T;LBBKyvRM5N$YGMqS zWHw{GVYsvN{mv|!wBP&xK9QL-=Qd}~Jm)#j<@XG@XvT#>dOfRjp*vjsGcJs%njpQ9 zm0N<+KOn;)Zg`0GkBR!wBEZ1!nOR3BPw-2L;azBgwsKAqQ zR_OwFl$b$fE=1KI#|5R&13#6s78SXNP(d3gmr>i`j^!5_oQuNiH2k9QgR*=GNTOb{ zI=w4t;qA->b~H1L9n74~Mr8hnORc>O^P5q)CRr)Y_vK{mRW3Dct*Y* zUCv4FOZ2X^@{3|2;USJ5BtC*S`;F%(lnw88ivWwG`D~R1Q z!5x`)QJhY}2AoYTT+RyuY@aU z8HSX^uuz|8098i8UN=j8k@WBwIV-B7Dwl7UB1Delu9$^0e>Cl^AU>v2Mqq@InbkGL ziXTwEnZ?-Imd&aZOJ!w+iBCraidDqeS}vxk>K`?)73eqAZY_UK3hUDZf|H#WT*Lgy zV~*(-*b10(ew1+ewfy_#Vl1^5kj90*-%4iweQ|(F^69ZI7xoVB&%XWVj`xe=KSgBI?fNEIP?Iy1~|Q99~s zN)XS<108zzP*a!ygDWHcQ%)T~87z)aCH^WmMSu!9A=3ym#iBTleT{UXw0%K<{fiHt zuH72!kUT|V7**l>ain6KhHQW2mW9Nuc{-;Gd?);k-J$?SG)h>^k^M2;sBWDa2LC>J zT2U!cS$Q*O^_u5d`b=mD?@Viw*fGwVpFw5@$&9qNsKh@fi3i4sx(PGFon{kF#3kcU z``(()->EL9lZ@TdC#qAPIsacj%PVv9Q`(XygNgH&lr84)-j1x1$s{?*OYvW*ekdR2y7|IRY;zvCqB0(irqv*cLr&&k-) zr}t^a%M@!9)vDCCVyxX;?-p_!K9X{N6n%U#DFn&ZM4ylRvXI`HZhaUsF{r1Uwdy%5Zt{k#}Pb zny6dvvfos$m3E_Rx3;iQipOx=v7YPNLZ1%)4tB_i=W@MIu1u7BXvv{x;9$zO2$`!{ zb>1s;=?vH^GSd*9t8$aIonXWC+E0<}!Y;WeKrt*1!sBvJ?|} zq)zRbuX81H>$Mr~nMcNA&H5xRi(+HT0JD5s{OOc;S)FFMM*6z5rI;@eOobOsg!nww>3!=QXde zY&)ts={4s;xM*Bz>7*B1@-2-;mc{~$UMN*`M8AEin5NNJ3uW+LB{}QNE*i%uS42{B zon1-Cx>Pwe!t?(5Q$?djNNaQ6bm^S^b*iOUsU`}1QTKHp23H{{q)LkqLD+ZCI-F|} z7g4p-c~-kQm~V04g14#G3WcCmo!mayBU0)eV2!ovH1d4J0icT{9;)uI;T!wjuON=Y zt-D^!uTt|X)tZ$w5!jNuAhJb!VNqH_dpBvltF`YdNf@Jsi=^^n|u^`+T`=e-3=ET+QI9!n)90O5D+G9fYj%2769NLbY5`lybmr} zvaJ7gyzL`nupn*g;f_TCI%}y@g;>;~pqy;Gz<~C?7MIHqGo0&XVEUeamGM#u9tMM{w}uQG1L^X-osis2vUX@C<>;Qe&h3X-L0#s^v@eE=dCC158#9$BB#NY*(GsJ1KSRWK470poW9)qH)!HN}%F;Qg2 zlZoMNc$hA}{myVPON2|1iAr|F#b|oKB^*?(9w&x!MQM=73(0hz#fuu%g0hTHO{=A| z43t|vEFe??Ynw2hz#cPIRJM>!;7+Q<8C0zUGzrggtwog8&|P8RX{InywVJ@C2+$m; znNNq~P76=qy+oo)boSIGuoiFJ!en9VB~8Cq>qR+0Gs5sB8Wk@o$xtI(nMIsJ)!O;= z63bTGDhn1$t;vZ*oz{yZYLRZI=dkzlLCw%oK4RdgiVa)9PS+gO3`;k>TG-0s_@kKW zA81ybhHlUoP=Q|3P+lpE5iaVtJ4ZD6xojvglV0)er_sM)P8Fhxm!g+2hI$-7!K1wsL1M zSCu(Boop_#bO$`w)MO6E`(GbZ(Rc*MDvPGaiz9C?vm~Ef=7kPRNZ2Ne#U_`PiqnF8dWD6zdTkY!=d|9spckyhmKWn)1!<7KR3jW}v$eu< z6HtY39?fQI3pS5-*uE7o+TwC-^-UB%dh1>O=wR2-tU|_(`km&BhxE7J4(+lEpz@Q9Rx) ztMiP?ZVha4%Y{-tZtGNU9C-Xzpk7uJX76-h^kGg%nWa{PcY=-OUvf4Ds|7E{K_ZkJ z@%o1d*(DEx{yJedK=7!QI?`eD;w3{)@PA;#9KE&kt+#gSXsUNW-??Z6ZrC)~vmI~S zoIR{|xkw{OjzZnCBxOaMROpY@FJ$l2^h>uuk#^_#I%|^CQDdo%;Nus98+hY}E&b9* zcj@zk8iB&{75!B0Wbw5zyk+qns@5pmvKd&l0Ax`n?5*HFOh*U1m{+E&%ECryHmJBP zm0PD-G%kgM0lDtugPu;kW{5nUcVf0Z9r_L}7EO(%LkD$u+?%H&)2z&CdX;*@H%+aGc zYS6=irbmip?a4wGO}YA$`#ZF%@A}a6D{B__86_iGlGetbB(`=eyn3s5^>}hWyz!cT z4myOceuXT-;xL-rkI53mpHYNp2@AS2_F@1O?hgMN`eesR_C4ZOCHn^73D&Tf;#Z7! z2MP+wvR}O9?nFo*l43UO-)06pD6~4tL?;3VMLmV_*C4O7m<%fO_p3F@tH<$9e;DJ| zC8^-F^{gMH*y;T0Vbv0{UJR%&mQd14e#KySpp1VQd)7i|dNq=h%T&AX{=Ka$2Dh#rUf?YZ zb_e+RUY&Q58XH3I?X`C_pz<9%AxHJYkIv>{hXr(U#bDocR9-)fN4xb`y}MWSXb@s& zg6EfmYM9jr3ky-u|2mc*z!kkgpfg2EbIVsWlH46qQd9)gy~QAw=_onF>54U(aK<36Yub78Z>=Y4C&CyVM=d zcWM@?UP3vmdWpQ3(ALA>T!*_ivsYPGWM2Npc59<4-XSbSkzd~{SO z>x*3g*)Pv&uClC)sTkIUv6Q2!|C2;fiD^$rKu+HS8 zV%9jeg>bS34E7Y@hUB)o!5-;UA^(2z8UB`cg_5;Wr58#{%apf_jiAP|F5G7YEy~^G z9e+~;4qqzH&PRHDD#p5%G+h6Q5By?4%w$s1Gd zo%32UNlVE;Pg$2juJ8Q3sO0ZX7LxZTf0ujj962eMk(2W9yO>FB+d@BPfkr*KB=xMg zffn22tJvGMdJvxPSn8D_VgF+mn74mup)zIn%+xE=wEaH>d9}z=oGdc5HBm0#?OAz~}@(s&1 zfq14U?d;wL2JkWF5gWFZNpINQI_`b7WP%w{|3(z6;oeuhp=IsJw<>+Pji^i~PRj(8 zmwR6erVpGRnYq1Fp%C}f>M?tmY6yg49SNTHCs2Wx zV*Ov=uY71I5E&%zH+Y&@{k{%%2;zHT?hgZhV+L$IQP~{_Pp`V+?4`XD(vIrBf@&rAxE- zF=jui-gUovMr1ebvlTI^1Au1zH<1@c;2G#Mw=F3F6O zW|ySLNxMs;{y_mDrQUj8S{PVHpihA;c@3FI>5prKyO4OT5iw`2I!baJFiFM(v=d%7 zR((KMQS~Z}^Y`f+gocZ$vhO@^USaK1%b!F0Ips71M58BNd@2E%-}f!h0VL~osn=E$ zQ+oJMA!I`bP-2t<^Qh*s*T(E(u?go{2_k|L_rwXMetEYTO;tdjZIX+MidxG}rE>au z`^hpeA2pzGzm8LU404qC<2e3?qv68a@y0fY0BMwT3!7~TEZegv7^`Pcgs{b7nk+gn zq@pe{^dqXMio{6m_Is>3_muEmEzsqwgjOTK)g@_X2m879xwye?zFqFFKw?-R1KKQ~ zq@aErQ2QysLI>J8RyWYDacd3c2IhcjIV-|;AplL*l6GoZy{*KWdbUYL(gN0=bt35@ zC=XV*d))&w=n$qYf~6X|9<4veRJ{s_-A^~(G zF1OcC;>Hjm02{M5bGFNbi*GyW$E;AX%8F(u9Hyw$D_xhnE(46F#js3m73@qHsJ!V5 ztda_5q6Jo;7JEa`tv?i`$em?+fmJrox7J84a?)=ASH5Z22&0Ztaf`MA80Mc?G2>}% z)$wOWO8HOtLVGnR_Z!8a^G!({k}FHYpzh-K=lmQ99_KSXC_% zr>2nv;H^KkQsRG7Zfy{$mbs^X;5qDxPQ z5m2opFQk!8>aqSm#jk06#46jKz!1@wyDF1n%OI((fTM0vrjgAiT^TdgY#z3@3`vXB ztiTteAyb{>QE{g1f|snN^3=4f1bBI~rcpy{;wNlxfmcQ+{(mqU_#fr?!6<0Np>ODU zWhCjiZIxAd`$$z-mG_U-YO6v4uf_|M@{h}Y+DhEVkE*z&2IdHzc9HPJD6Q{u;}h29 z6a4WhtNze5Y6Li^r>tXcP2%Xa(fz-*j?n(=3dQ{f6z8(~ZzvZmF4kG~v_A}&+uHQ} zIY&c}|2m;M+Hd%N-VKuH0O#$Y{c%d$Xx%p2s?*1}M2hPpeINS<_j8QzgUlSawn-~R z_%64$$9&9PQDv&u;hhzg6pQDnrnzYs(@q?+Q*_HDaY>{;x6=1@RRtX5Ws@qgXIy36 z;Th)ZWEV)e!5}ch{5wXq_bTH{y2dnaWcGc|G;U`0U1u6S3^x|zj^eVvVf5}We|UJ~ zQ_TJ+8S$P-uX#OI1)9M-_Zu~KoeDPpBLbBa5)gI;g7`y7X?$Fhh}?3E3yP@7-I->{_Zh zias1$Ziq*2*D=LqZ$sZO_YT)oD!cjh$iSi7HI;9R`Tc;07l|8XNYIHISW8TE(Fd^T z2Ap8#(!b1Q=f?n1Mow0D4qpxj^Ns@vGuk#74%|O@!6FRylocO7GPypk?4Xe%JO9n< zor5=bXy+ExBg)it!7WuJcT^VChx3=<*OQZWFp9FhOEU~l*0kr7k7~M-hnnVY(Pcj5 zitY=C3pCi4nc<>ydv7mjdf?4M-{(zp36^caeV?m8fW!vi*Y1{;neeho{{n^Z%UsdR=D?)R_6-I1JU-6y%N5n=V1eSgqc=Fr3V7USUkxd&Q zae~|^wr+9r4fZoWFRJlHhD7X@dI>uJ#FHlwZ}^SamtG1RMkJ$CXADBnL1ND=&qc+VM@aYet`J5aqd^tva2p#kf+fvX>K=Ev=--3O6*i&HT)CIuViy@MGPVY>0;oPZAGQ2SHxwcY_Hd`GKMoF zx4NRVNc@=ceNy4;tL7(@`s^fNLI^s9HHh!ZVhsf=*#f{rR1nyTDWEtaxNJmvxaomK zvo^XM8k&g@w zR7kYf{GB3r5CjRc&~*jh>%V6dD98j1byQOq4PsL*@9y($eVIwUlB1w{n{S2Ss$l;8 zkR`9z+jcQzHc25_Gg~gFUO~9}E{2B>8wPTOfgA}Zh&DZn#7}}1Vo#75xq z%!8oJ;>%RE@-Q0luK}TqGyjq?5Mo>rb2utiJU^-CWJwt}rmia@c$DrwzMnhxKz-6* zm_vVJ{3;T4^)TOaSMa~bugc@zPe>hrH2&PTE?59aK?moyJN!9RL(gEIL6+m)MiO<> zfFQat?-q<>uJFIBg6{`A@bkWVsGg1REztzudlFzkvz9L;(3TdtZ;CjBkfxO{G~m8` zVK{Ec7aF}QG*S$af6}nM0FfB0Ap#CJ21!!n`{CPlq@8WJu=Nj=Hs1RO&PveaEkU8Q z>@bzv+BO;fVEXX&1+DFq4~Adg{NJ2)NQ2--)8L4wT?-LGqC8(~mR{pO;`@C^TZj}H zw=EB`&*u0RY|C`K?~5zbrXM3ab6VRdB7e$Ci&`&F=ExUjTdz${YXg8moCOSn8Zd^| zV-p2uCki691VvF!S5(&sr6sKo%;&ooE==Jg7cT76I=kKdNCG>v9JYifC`S7tMQLWM zI8}wZjcU^VfHLTFs2_yQrP`wH6gLw=!^>$!zv1pL1# zR>HQP7cKr(tv6jEU?02(Zau7XQ+#>G7J|l$Yf&Sj-qxarSQynJ;{lB=DsFukMNE%( z=v*i-D=8+o#hb^SY1|p_9!xV>;ro&dAO(vTYU0fWi_pgH({vZ%8{ zi&~jvtPr%aiY%qSCIE6w30Ol~vUnDSdp3Z$wFvyRdN$}tDuFe6Hegv8KtJ00M@<6h zl^yO_WTNuPlO(XiWcGIe&OibHmDfQq_HYT*g(uZ(7dz|Vx8ni9s0){u7)U&3oiWMx z{d}WbXdq^)G61=_voOgiSgzg?aJz8$lcoW80^9=ud_7-7tX6bGTgx&S!}JhpJ91>( zM+|?dW$FJ8KZ!#y?iOo!C%x55Me*jR?E9XyCkCBIT?VhYhiSaP2(9W}Unk9-LGR0p z5qEzk02D(&MdC|WU;w`^5e=&mCERBYy=?o0fxKE)ekuwAn~=V@7b-^j-p`qmblx_? zgg$B7-J5#FQ8d`waG|k4Te1H!ZG08KV)XYw9`oz(f!J3fw%iC+ z{jdBjxAMuoidxj-qjE(kcdipRVy8b3fan5w;COGjmrn51ovjg*sql6i%g3k(QH#VNuS<#SB7b0@i`PhMpsg6~OTuQqWIgW8(6lF=?` z2^0SkOnQz+H_xFPxZR2{TQ3CD+O~8Y(44z`t```NF4;EIzIU?SclnqjI2o3tDyQv9 z*c!S6n*~Z&46;djKo9@&aOGxUo~rj+6^Yv=JF73HgbAJ^rf*+%DYHCyMqC!;&-t>) znY6ZyYpf~<5e>6~VoFdkE(|O72;R}h%+tF}zOK{(%>~T`xm=}`wy4HUC)lWWmYLdG zRIK40?CFT3zA`3^1q=c4m|SauTT-2RIkgQzL|f07$TppQ?{&s!zQKrZ-GtR;jH#nD zlExUId)tV4Lm=~MaNCI@zxN4iQU)ERP1+x&b?8~GIQjbUzKx(q595ka3^vgjFwVei zlR}Iv#CXH1hF=j^;!fYcQSQxGYs1C78^nqt#@~d5JM$(no+$d_`{VmID~1*EC*x@+ zwwUKw`?N&&RcHlb{hQ+wy>C4uzCJD}k%11qXZT)sMDdZCcEkYszg*P+R^^eaj5(g~ zhYgR8-y1}457;~CI2%RGZ$i189-LeX58B?b$^1|W-<@`XygA++oUAe1?OwClR`p$$ z*BoW5;NMF-`&~w~&1W8)TyM77srRt6m9EC z*I=DD^k7MCYYU~@DwO=>iTrC@j^$p<2d_DFOw**kmfIA0?a*mrPRUJeyOvLK$l0%< zCNd1DBIB%As^&N8uI28f?1@p=z=tSooJHaz-xP@>qZP1Q+UxAFf0g)b*O}n^zVsXL zAO%lDMq#96(4e`5DPFcE;In}W(@UBB;AujDFptyX+oM%~S1HUu)QyRM8HFddDpOsj z9uk_UVMxhkMf`1u$=C-gVBCZRQzi;mdB^36SEd&SN6GRcYrh;0-nE3s5REoHwEQ2U z#XQQ_mre*x%}y&hbU`z^edH>n0s_vz{q|1mVC?A5w|WDkReE8x>g~6B$6$;Y#x37& z2|E>)+oC=dRp{;)2#NYSU&035u0ERN{aq25-*sl-in^Wqkm|miuKC?8+e_&U^tX(< zJLHM38TEli?>ikln)(e{=sw4|GH5L<2Udi9|eic2BcG%bv zs0ASu2e>2c3%Ml}Gy|nlYqUDr9E_c^$u=cwl09Z3XRE>M${-Zp+qsrMv;m$7C3U}E=_mTV020By1127mphim7i}t)<)9`Q z8C(`D4!VL*27eoTD)@A8eQ-l?V{lWD3vLcR6Z8b1rKr}i7|b*zU~&I=jNoE2TdSoPnJP> zcN@XI?upRI!_tZY`ezoIHDq39t(iC2s1_=7oPD^?n#sB6HUU-z$NI6%Rd7(aTyZ;7 z-uYb{`nqE|PPtmB)dBeF#`Qm!frnNLxNFdDAz)B* z7RRw+Sy6IRkOliRT_J11Wy}l?xwE@2?~ooLmBL9SJu12BrXWP)#Dggmo|oK4cOdF; zdj8I_ly@=&mhK&bcbX=+fY*k}a-qau1<2whOBY5Qn=kts2=*%DbtKrf^lTZLOdJ`-j^L`BP+#cyUc)>GUBg>!Rny)UuNo&U5{cg-B$?L zeYFzkkiUz(`4S`E93)GOyl8_Wpx^}qE&$tT-}A}}`*1Mzo9Al;ajPiXEOruXqR&*- zJ+NP7;Mq*%M&s*d);peNjNh=4+;DuIz25vJ?4OW5!s{JKIi5n18%$|fphCt>ftcsS zKlbfIICgCx|AclTXj>yDwTbn8frNJQeWxV9S|v^MtJPAR-%3f0A9nU=zf~)z!tyOwUs4SjGUuW7byTWy!taPt$~>cvYDdnSD-+Y)V353dhZInp$} zl+>vvJ&+EXrYlYUA=|3#;uDlKEywMUZDn>sAP39?H}Cu4`CUaiGez!O>C%YDsG2pE zRn>d*W8ToX_0?|}Sao%EN%6@YFe2LtWl!@Rle9bFl_$MGsWIGl%%#m}uMNY@Ysp=P zg;pN}<)co0=OZPoEo2Z>EHlQ?hoEHJFYIK<5sH@>+7cBD+<}7nruRN>H?}>Q=$=|e zzWZV;EaYz!C!2;EClIzV{<`P5dTkBjCm;gsk@bilI7y6~N6PFFpMY^&E0|7foLp=p zev@)wV*LpT{cqJ&%C^Vs0&p^q+vTEtKeIRf#9k2^7r7}h6=}sk^(kMABjM=ca!UNs zMRp;vh=vTLzC6wMz7|G{_fg`)ivR{Hg#?UcC3Q(hDq?N=g&c}tr!EHuKZ6Zy82E&5 zi4Sg8OpfY3ityM;Ufk zb8-w@9DI*-96rphP&yiR=W%i}J4F#FhuMcYId$0mz(J#m8=b{Q9n=CvbMPyQTo?`> zhP*MxXhI{>cBPClUh@bz%ME7ej|k&FGRww0Mo4r(Us@aayoUZQjnF%~R$uX&a9~!T zR!(gTurj%kon`#$Xrf3YyET4Qbo1Oh`qAER6kbFr7fJ=V7;#Ec*}U(9hHFztP9Unx#%XW z!X`W6QM@h45JuXkmbAlxXDKo7HcMjz>fh2XK0=a_b>fx|G37REM3ql*d45Z0$i-<1 zy{~Xz$3T~{Jy8!Y_yFJD7-Y8G;=YXR>g9T)jPSMU4`|O`Q7}m#aKLX!89dA9Q7 z=_>odD60QYZ&t-OsY!29N^eBe4%Lq*`=!>|#e&mB+FemwhMK7F>XFG%CTmEUtXs-t z!CeiSgF(nJ{W4;(6>MDj7(eVY4>Aj&9WPFL=Vgx!F>OcEJ39!Fh;(mEyI4%_Q0cm- z_cNs?f4-n#eECFO4eFMnLWI4t+NJ9iha}bT*xCtS`v3OtW$=em*nmGd^|0P^Oj}LZ zlM;rdKINvfx!BSI;S$upL!&_$#yEs zmvq4P+C*+yc`LB$RQT>h>ZD1DsQO;6_Fr?!Kpwhs>XD5Yi|=vyHP&?Mk)BfziFKM& z4_zj8Cfrk=jYi5n@5n|wLU0g>v(&8@D=F7KQURZS+P;*Xxx`~{B?*?kepu0%{3u7H#NS|dc z^MjA9P_y9^-MDWJOSAb4nmAVyf3D%EbI@&g#E}wHYmsb9pWPDqX~{>gx*c1!e78Um zhkWBr`vhL*Q~NghGrKt+h=@ZU>P}6w#q;J}F?}fw^mRMHud}J+^zN8#7t$`K%Z?Xg zYIU~wz;mkfUZ3P!^M%d~=_PKKJAXH$LY4M)>tB~)?t!Eowum%abb ztm&Y>R5s+PXlJ7|js5Rv=Kko}0_V{jQ2coFy9 zkUeMlZ@)S`JNC%zSn;pa;a|oa*&c(S-;?C7>OhKIR!&k{NrN{tQLUbuNNl1uXD7sd z^pP7|YEo>d%J!HeFT{vHzEfp2wfjDxu;5oPc{U;*PS?4ZmZ{z6)a54fcv{w=Jl@)x zlX%Z9D^5*QCQ9F`rpO$?<^8E$ftAE_*$DtPML70Oi#cwa9z!gR@h6>wwPwVL@;cKZ zHG4~*DqZ{6#j*1ryKV7bKRK8D0hW_gWflKPa*xa8bUa~q>G(c~7W;l<&v6606ZlXr zDV9@yW5*+)#SR#{AZY~-%gS&j!Ff)GgDLcjV~~wA#ouCrjKrKA~ZaEJJQHkRtaeGJTdbDd3PJ7Hvly&lGlaH>x{d}rz4zY zhC02=;9N|v1H4|9c9!pe1y?_K0dZ{?sOp-vp+S;SmX`nj4l?S08Di}BhNuh>QTry@ zy+m5^e;?-mI!F^4B%Qq2IHfE+c`-c&ad@)(&Pdl*hXzXPOf;?2>F_&ybL*HEYLG47 zbIibH_uExK`G2x`llr6yX#8X3Bf~oti=+aZQP-+ZB^-Grl22Dt$%C7NRFq3|n2H){ z_;~X%^VHE=Q(9X(OmFrxYH5S#N-*7<^pu_NAaQ(4(;J_(YX-e&xJ^jDG-K%Ksq{ui4AOBiXdD}}nX>7}umBE5O-(+N*4F=~EuQrGOZC3lF^wDTyKj>}AmdY& zn{4qmecCs>W2l3s&}W+5O;ew~0Bx%15zzaz4t2VV3t`fxP$jwWW2^KezoFX`gL_`Q+ghA)MslABE23 zlUzIr?A@(VKEq8ymb@uBG2{abTHRc#DD-WvPMWoy1@>ksvo8~sm?5MWGn&brbiQpe zj$4?z*iO2hc{lbX`O9p!*0@gkSzFlDlc;8Wn4I#hGiH*qrPed|b<&?OjrWnORkr8{ z5N=^B!SR>2G#p>BJ&5C8+mZ)J`7<`J5p$v(ci8rzWWVx6f3`iI(MkWp{*tbfeu8N> zlDb8x@5nye=gr zWl4Dk)k~eFG^+KwKj{9U8`Hh4yGeETIS&3Vvf+G+{8AJZf3l!(-osfDMh8@jwGAES z_%wM;;l(8fb=2WBYJwN1f)}%2Nm)oXCG@{rnBZk;(jphY~-*;(J-S{=MT!mf>=ladkSVG{sZyO zjTF_WruJ&7U4poAqO$H{AF2zX3-!gmeP*gLih_BTCV%j5&&A%xaH`Qj325uJ0auDR zeE)+F9dS^nrsa62ZbQ^hr?$8MP`v5zXT~G##!x?Dhd!bYZ=;VKq#fAY9-Ik57S(%4 z`HyhoKgQTY{meu^j^mSYokP00EpTRrQiuA0aHm$TwL;OOo~v>E)${8pjAyje;m17p zq_z1L171GRsR9yR1%J*N6@<+<$X_xGss=i>?r`AD4BQ#5cvCH%ALulont@a^1m0Ks z95lt9Y~%XI2F^_v&^*2f90`(T)(8-F72%v@#`Vm3nk-6H0ce*BH{Nsp2`Y>>Q1R8C zV{vQ#k9@?fCN?tulXL`yrz1+en#e$b9yRf?mGd=PzCb;A&UcFYd|p?eD{$`QKxZ3U z0_L{))@9W|dz(99usuQL&KYQravR8JdTr8!+qscw*36Aq*)Zvz?St)6MDO`(KA#>% zIn$#l_@+MzdOE_rxZZPqV9&+OfKD|a!1pZWZ~v}mHcV-$ksjI(rH&TcC@Fb+s1Gyw zVEbV_yJpY%!95pef0rxn2zst5Jr4-s?jpY5^W_Z?Z|t6n+4&TaW5nNL`cv|iKmCFB z(*1YZvNO1o;iNmIM~v%xoo3zX^n1^3Ql2}8Jhw(#yxsRcP<@Av6`kw-?M-s)tDatc z7jZkBJNG`pH781u+q+M8pG5bA0{mh90{4NoW3d`D@VF8iRulM1Ffk|^RiTTkZ1#mbDwD9>{&+uILD)Jtt{_Cu68UL4AMbqNVpHte+M-hxvU_j^y zFg=x?&*yRI%)p_uMDC_x^NFK0DSe)j9thn`wRxCQ!JV{;5)-j9xesy_x;e3@r<)u< z?b-8bwvF0jq-|7X;&>o;e9y&=(R=uU*ukUnCU)Au;uy|t+w<8I(MrB&V=P>Tn*-T7 zssg-*C!&S46W#z@K%~EdXm5elTVV4R*u4d@l1S)wW}Aw;t;%Yn5IREs657{e1IKdQ zg}A+=ysWqsV<4ca^V}DD?oz>!_8#tzRKhRtcr+jj=mmnY$n>WLx?P&JE@ojH@ z7AEfK=HJ0_8Q#1F&V0Ig>l-<4N?Eu2D9S{uA>r*LV%*N^&}xSw3*5Cka=(>I>7ZNb z?UGh@P*i-ynMRtLnJI^A85(2phEigwM)=S7(IgaB;Zvs2DEHc^#Q7#H(V22Q;aM}O z@KC#iJ?FEH)E?e!q_{8oO-Ju^v*-L6&ghGj6r;%aMST*sQt?mLHP6vTO8m+9I=T1% z*2zVOk}^{JVgd7y`+xW5u&m+R`Ev+U`QFNyF*>m_$c@m%MumZF4d!rapxc)M_H?S9 z`(nQF6uDw35Xfij`R4;q1xNQ3J?bdquO44#@M*d5wt@ohIzuR!V4y3}9-g%2SkoS_ zwv>FK`k~Q1XNp4XQkhjq7+Yv7H8Hd3$)CFVPG?F#_i9ViF0QI@9&^v)b5t`&=VqOs z>(={n)R{M2Hj*O;vo7``z9&bO_1R@s)1lp7T@$~i;>^pY|1dpm`qcE2>4&BbI6r5q zG}Yq#ys6yupE#GAerEFETx|M@X*14V)1#(e<6LO^v1t>|e~x%A!Z|g4sxRVq5idsk zG2->`O%Z<$KZs*DelLc95xyqE9r1X?&G1Je7DW_C+_sF{Kb*YO{#R>hjDcyg_r&d( zvMJ)fVm^=C5hun)#-=)A91e%oF~c#-ald0zglGC&(@#wMcG{+h(9e*gc!oJ)Q^ZTL z*W<|b52n63^_8hjQ~xn_t8#v2;-?WmuS`9R(yhu>nfXM-rxB;{6FOhS&qDJ>T#@T^ z^OndfI1fc!i6CdS`A+!|(j;FuDOBDcF&^wZU3;=U)z` znMk!!IhK}tZ)^$`T;KFPCFf2*969(7{Cwc{{<+?uOi{0u{=_^{ioCRUx++G(m~&pQ_G*+{UJ&J z^9Hl}Ugw*B#lkRnX7t(J3A;)EZ~yj8_aNgsK>E~BA3j~xlfC+9&*?CbhgW_)d#LNf zj{rlW&V9l>ey#P;GttOD`FuqUzlHu5ECDUP*pi@9>wf!67)pNl_?i0O{Oyqwktlg_ zWN~LO{2x~=|JFiFrB)lxocL4GpT}{>)7|g?&+<2JbV1Ce{^(8aeWN7*6&=z)&MkWM zOyK%<0)N`R{GG%vzgYMuopQe@&%82Y;bS+*WPjD-_|^8}qHCnYnfR;fgzZId|9cBH zwac!%Jw~&)$d%!p&#kMn_FOe1{nxdPLVnMUajR16*L6?Np^!HBCh;?sMcIiT4a zjr2xO*jLt}`~P86?yjwSxxKgiKlhNCd!_J!fro0IzXZvS@-6@Rsc%l4`x{g*>cp(D zsdKIz^MMng-_~`%$*xwv-9Tpa2iMd7PglJ56;kWPR?jal-(K5B=51n?(`1#?omy`j zR_z&+$!3Z&#hONoXorGEg53pb#25moI*)I(E?L5_4D#o@gf77Y4gp^xc$FvA18*P;D(=I9W zGtq$_9Xz9#ekm@cT$$eV7pQ@wT2@Qi4hX?F4_9Qk5bp zS)BW=2W%cbna~J)|HJjh`EGT6ss1Q+AbG@@ZKj4cslFA+AFP2SsQ|k6*%X=6Kx13z z@+Dzg_@JG;GT(TNTrt%Dkw1&qLk>L?_>Up}yr+-G{O-`-N$u8){qpyQ)O34dNWz^O z`|s9$Q$Ki=Cc_ zHyWg`Ln)s@smJ5Br@a2%52y%pDv)d#8^d2${!L^K&?d~y@zjr=JSuGg&3*=;O#ff% zv><+-@0YeFA6;+QI=JPQ<~>+Qda@Q$8|OS)!n+Ost)fyt`mK8KQ+_hPQq8Z?@*8N= z|5MzzfHiex3-6PJBqR{Rqks{^!3QWWm8d9hAPJxdk?>L>7$vq$5okzIdo6~hQ%R0> zoK7EJukF;f)81;GLC5h@xm5(;))ur?)cQiS!AP}Y!6*6GJ|_XR?c96+|9;<}d?)AZ zwb$Nzt+m%)`?*f~RexXY-9dHjkPWQ+ z5k~DbW^jO!2>T3d^KpW@Np(^uD3~#se-y90Zcyu|n1{G)WN(A3BFwS~>p^Sx+txGI zpR6aXcI##9eZ28z{*k}Z+c3HFdgrOm&d$@F9ZF-reayPA2M;B~+{}EE?6koG=cUf` zofo_BQD5U%_Y59#B;zRJz2a5l*?zv+EZ-82?;38cxbrgLp2N7cI6j5C)B6fL!f$Lg zYitQ;EMQ1v1A}J=PY-quo*KOPv+o(-uYE814guQ7(8!BT_e`qZ&8!0JP|V#t_JI`D z_=j+k)DApxU@60cdQN!Cz#Z(SY}D}r8YHF)SO9Y$>}DVJJ#YRFzZwj{UNq(iv{-mR zB|GLy!EwfQ`Q9{lI#Z0w$OYy+l@S9i7Gm#bIwQfLj?1?B9ygyJ$-xV&Nf`tS^trjLzM~(ld0sz}#nMtt_EJ+e%n~REI*$b=)tj8DG65yJRz9dYYSFwt9p3;xs_YR8B=NdiYA+ zKh^r?vPJJ8U+E^~%iWB8{kNdnzV_S*fQ<#%Sb(ub5GRGWHp>4U^t1g~69*O^gQ0Z| z9R+oKM4f}#>vys~doLIjY#NG7dyhRDJc1m?vCyvGwO+9vu|Be1wDwxRw%&dBZR@vI zIJWjSAefBHbB3GTSqw1TwyTBT36Be)ZNm9CIkrM%hfO~gE-#pFnpTd}hruF zGu^oVHrR|SPnYooh9u+kkpqYMhA?Lt!E_m8oMm{+`b>xUz9)Sz`aW?L6m!a+(P4wk zQlHJtL}%7U{B~yMHez&UTi-(OTAs7aXIV-)76rGs6dYw6bplwBO?f4-VTfq0=Ua?? zd@Qyd#BE#h5F%;w&8L~fU%d#f@nFquX>=@v1T9{Fo08XQXz&UYQW4R!5?Iw$y-)Imv=JPCTpz~^! zb1bm`#A%1fW|XprWqN2behsLTT4nhtJ=AH!msN$@y&>xX=t&VCr+Zn!qCLFB*Fkv~}5w?}XNgumVX z8LpD!_UkyaX@gyEuR0O~(JQfkq)E572@X^F9IAv%cW1{5SgSf;iyyjwe*HR#1@fYs z+a>GWm{Yxz9JCx&4n|0>^&h*lM%N8Nz1!gGfa_@Jj&(y+*KmV;<_@Q78%ucLPGZSt zTPg|RN#SwpJ<|>3B$TEP#31KWGSd#glX zx@PL_L%rXiUIAhMGb1xbtA4^-RmsQZ;g!n`Pl(6$-&v~( zFcZ7@_8Wo=hRb$(7(cDykb@0lw3Fro94okX-Y{A7dC-QaN}!PFxCxY8gtPPmK!%eZ z`|H@Iz-HQXFvJ(B)6HIJlnSzYohle}tT9_iePgIFBR0+!#&VsGA zKxiO>p4FVe^9GKrZIyc&(Ah3KWoJgkc*x!7Y!LT_hYX4M&8W@6qsh*;{gP}C^Pt20 zv%`D{cRj!W_Lk~>i|C#0pq|M3qQt0o9Z?A9?r>q)Xbe-EN>dv{QyaWiHk#Tsgs{&T z!cgmB?su5)I-s8bosqS#;sV9gd2o|84A5k^Ad~D=yR#8@jnFS_7q%Iao0CV=zy60` z($9t^U7Bp87ZfUl4*e$h^Ph?$QSaBNS3iVb1pDrrWpuS3!Zka>K`za~Oqzq_wW*^y z*ozqI*)|!H9a%NjIVl_agKJVIbI^M6o&CD-iSUu|p^;_3K=T8=puGpi$KSyS`TWno zGYslLvUI6TNw1KjOHzSu2#+}VK{46CbOC`s$2ISjn?oA#%m$gP~h%i4$d1Wyyq}TfjPYb^@usjIrEbIf{ z20zE%X`Q#39BNq|9o=_bp^k51&=tz`t}rR$7^mPH-#A^+2B%38|seBtOd z5!1uuN1e4FVGwT)$OR_jIeRyK|K9%1Q`Y;|v^O8UM~$^3e#ldxj_Q z&Muzs=169&4;+MABZTvN2XXP+VVLPm(=w6xokADfmX%=inPGuHaj$J%X8R-<@b$bp@({4qS(x zf7LmA2NOCQa|OR)rN#a|%zFGr33cs72y#4`>N>xBIljxZ6EjlHBe5mc4vCyX7!{l!As`b1Ep+PbG<;T0m&G z{nS^>S=4*A4^|=$d&C3MTE1=1ZSxTi`)zuS3J8NGl_0}dymn=4r?LOu_XX4#hZ?ut z5~Ngi!$y$y|Xv_LG~E`bza zYVk^!tPeKXv6tu|L{SQUgq;7;`)GK5Lcx873kw(aw2kp{u71)=pZF4vUb<2kpUu(- ztmMS|>Ah_&$ei>(G`O+0b;#Id_hUky;Cf~I0NHAh5&Q)y1D|?D0P`aib;x}Eu`v1r zWDWI1rk+Qzx#VW*d1A-A!r)=)4l|1oQ_p@JPJt~a941XYLpV${LK0bDZ^hjYJYhc= zr(^JNFa-yP?B4^L{VX1DdN6dj!M>UOb~_kDda=VHdLMOO*AwlSZE({YUaOFE6|_Rw zB2jzC_qAk4hu#MUIIz<-*6xmX#cpr5 z|L_4?o(aP_JgCcO!TvKZg+A|czVp6C!8bn|(z74f=j1gTn+C6a*;T~8SP@n7U1Iokj(>um}tQU&;;U zts7i-+;p8V-5}zAHcl4wtvn7LQNsa8GNAJt+8oL8$Bo|3*88cE_o#$w7(@6)*n5vVa!cnaRx-Dnh z1YOtI5^lA(%yqYwI@)mBa4)bk)7_ueWHASEv5c4V%lWErgu!&GngDrn`xAid4@%CaENW1U5 z$+s;UvQ4xzl!GR=NCmdmp`vwzG}`T(u6q6HrbB^i^q*7x*Gn#{3xUdFWSeiNhBQU{ z%Mm{6U&=qCfQ^HF1AN=ila(A$k#sdCyXy&E#H&!);xe_Z0xgE|#RbD0s$(^0muc_< z9FooIyjJ_DsPh8kgu5&l7#+X^BPe2DIa4!P!=x78{4c2F4^vr$CHdLS!hI}vTOLD2 z;7yIqlVP^ycLLjP270&GmHXA+(P#Vc`4bj>)^gW`_1xVP_WDe0X2F@j<_R=#4*;7d z?0q<)c>+Et*e+G&L3H#X|6LQX3sf+8MM-VF4gl&LXDzkK2kNaj;or@2UYm3Wvb@mT$S}&(@B-6 z`QMSspE~HqMQ{e--lXrm;C6%3*r=SFRN*bE?haLd*IfUQZ}4lV9{~3p_6E&BL;ZdF zNqL{D`td#bbYc|?h`Hye8+y;8ykXJUEIBtVkX(7mqWsZP2fHhG*J}pWEAMa6Jbt6@ z2AnLb=VF@s|3cOEQ1#vT1Q~Qibprg(X9fhA3>4AtNHT>6aQ<+De*7SSW4$s-M0D8j zQXT`_TFIgRH_Z8L&EXCmJ8hew@0G#+ z7xt6*@1_+qX+=2FnNjVpWJJ~ZG@}n-i%BW6-r31LeT8*{y3ei`Z_xNXhCFs``{&<= zBh!fP^Gu%n|3;pF7eA)mNpQNM6UP4kK}ybJI7Wt3Cj3uR@*m@Uj9;dt6FO7*P#RHu zdp*yh@qxqFe~Rczw`kx*l^>-MGhjc9Qp|wGfIVDB2fNUZdT3R8Kzgc9yf=l2IP;kL zx_=w{;XLEud-!cV0%u9Xg>acdhI8jKxkFe*X?)a_Qmj(LR9m$G&aPjaJzFR5I>cGKawCtMMprAOcfmoM_yH%?-5dwi%{l;pga|o!Gene z7Z;GY3=*y1QWq~S5wL-c`;;_KLiKM|NxDGF_TZ9K=S6vKT2-2Er5Ma-H8b*Z6! zJcoT}gH$D<1&_7ibL=?X*=;?1cH95$z2OLWasLNXv4RmA{YPjFe1=A!Q8Z43yPuO* z$q21y8rm?e*5x8tX&yRAoySz~1*+Tr7pacBY7lh)ouOQWnpkHWdG^~h1Lj*?>edD& zN!3d!Wzar^67Xgxj|jE8f!o^xfF%%X*}VgZQc6@*PT&GJHd2`n@D^arpz8}z7*?V< zi2Ykg4yDwQ6SR*5*#wS=OTs?P2+X44;3~6d5G^>WpB5Fa)X+vbvA)#;o7x)0)a9W% z>F1U@>97RZO4vEvpke)Q)^Wq_`|d!m@lSC2*(EinxcFFH_`O2cw-L;^?Tvm9|@F7tUzk41^BS4MF*^p!z1>RCSOdG@I1 z$WhPasAs=X&wST2r9=%!z^L5seyicOiO0V0$dN*it8>7C@L%!|oWpT-c5fV!`Oz8) zaR1TElD%$--C^;smyFm&Pz?5cf(sbGEsvOPEu_V9hO4r|0kJ|AhQLIU|K$gaha5KjU=K=z4c{@YU>)f>ftg;mnhfmfuuV%g%L&~IIBjx{HD$7AC)`OujZri%=|3WfPMgE$A zrcDZ+7BWH=kd%Y}(HQ?hFz&zTUk)4pa`CT{uiEU-$GsT+7q)P`7aVPa=mePzEjtFm84?&D&x(<(Z>KnxAgW(>N_H&1 z%Mj`sWaB?-rlfHaODrYLmVA^gp^iqJFhAg}B<9lTXW{hH*%Aw2$!RJKYZBPCBI*pR zoh=$VYUIFHbRJDZ0504*b)QvY6*Wo(#|-iGF^FiW208xwwn?yE17=HVm2={3dT>zY z#o1PhsUtB1V72^gveMVw@C-wZjqs3>aBhKxvSiHa+w-M>Ej^0;M$LEtqNzX~8nn zNG%{MN)u#}#=uQt0nRB+paoc`H2xNl5R4ZsP&f=EEl?f|1}#tw3=}PpJ)V((ctD{o zKrx<_0Lge-0yMiM9p#QdyrsuU^g#|LR{-u}CuK3MALd9-&=9=wiy(AThRL)lx$um& zplA!8i|n^bzCeVm^>P39j~XTKm7TyXR)8> zgSG=Z1Tc_;oolcm7T9Z3dNj&;L)=E-DU)t39(03O3TPt${5~_l-Mq-t)rx7mmY9O{ z*w+%g(01|%t^%3tJJ6eHe5`T;&*j8c4!(JShR{hRUbocjYCqBNRE!99K%{I0Qs#CT3?;@$F`FpoffezkC-~?{sv^9Y# zWQa>$hxh8L=h1~Ma8U66)2;#_#HUQWtW^HY(VIIFT!_q?`}TyCsd zW~ivHBA00^D-lUeawnnE%VdC^uwSrV+!;fxNjc%DiSB@r& z3$^+R?b1pesn@+^tk452My$+IWXs8FmxN^EtSW;}UjpAy-r)cnyjwTRiW9=0&5K*+7-Gg z1F40os?(u4E{3wE<~oaxdpf;tRYk3#7RA%0=yl7g_2p!xuIhQi3n&rlrS?Urcc|_p z;GhPCQKPK|=~b0usbHE=^5}$49#Wp>4yB9pp<-5Ot5(y%S|oRoWvtTHX)7wR_>e-J zUcF+4u?p)4=t9&|r>$D11Cn%FgHiu~+lUp_& zF{*wX;)1Fg&_V;P0}K)}<>|_+$>sX$6}V3H21Jy0%A zblRF>CeY@*S<|LX^AtomX?3ZPrvS0&xELG<5GV_1sHuk9qiYl(<+^e}W7B9dj0SPK z=Yg|wuuo4C5Fx(a=D z6-Eba4~#vXrm(_kd8>55B26XGVXV~wmM4uR8;!O67f2!+X$D4GR$XP#S64=*pU-U~zTjHE13sQ{j>Py$+RUJg9xD#^6$T!@9NmIR_UCNH%jTLD?fopCrLA9P7H zlJ)#tc@~&mxd`18F*q(r0OES(LMf^FSx{h3ZaxVCU~|4ges3xo@Ad0kq$!}gQe~&6 zLz$D)b5)QLnOmsHn{sa^D)jnq(hr%8N_tO>HhPT|!o+x>kG&XtChUWDd%@GfrwKjG z-h$nG5G&;{n}x6^3%-;b7gWg^fx4jqFE%db9-JK$vquV4EAmNPrMY?cxJV)<>0-EO zqL?hmk>|owv=|Fb0Z+5VXGe<^}X$#}X`C5a4ROu^VWTDlUyP@4; zS|0ZZv`71&9>zZZ;?j#vS%Jtgk$@$gL z6tTfp>nfpLkyc~x@n!h7DSi^f=i7vWL|sh2S@Sb6juhFvQ%MFZ6~-e))zNABjKEk3lyKr0lWfA>+PW-IdZ6~K-g z+Qa01Pl8%~aKkCe%gR?^qUPlmwvM87O@0gCBAf zcR9Nd{3$={s&M;;kHwFn z9{<+xcpM%t3HacnrZMPN?5$WjbGYIEJwQlBf0<9VDxain#uUJR4)y~Gxcj1}sB{e7 zJl){{N6YI0=s_-GNFILg8DfE(B+u!Fc|-B^mq!qj!4;B^*gW(dk`d3w|5smB7X4Cm z=xlq$lG#gVzc+hEj^oFiA9EJuAh8sCZN3jgdZ4B)UMzUXMosmB@#$q)4a%}|l)1PH zC8)^{H8eC31P?+1s3~yF7O!+Sc=kk1;&Fc*=jSUBiNOnb7fM1+UkFv`3*j2LEO2dv zYZF|bz;zg|yKueeH34>O@hg~?62JH2xfKatocj9I7pKmpzvCk!>6c_JE?t9NK*8J8 zM9YsLSd2p|k1uc+dU%4gr^6Kkmkh2M1hjc~T7a)YodZW)0r3mg_qZQ%f9Ss1{dqx! zpk5G~gU})t{zd}rHdYhk$2tutLg)(k!L9IK;hmR8+19tZiIFJyBiM=or!<)6i(nJ_ zK`u223mK~B8Ax?vef#>Z%nf)A#S6jKYm=k@uNiRUpgog@?Bq~~2RlyN)}N2)sO7Bh zia2%p3T&jEr;gCjHX7PWL+@{BgBA81I1a9~woM#LXfnEe4hxOkgk8oJ{U2M~;PlSU zeKCY6n38hPW7#P{yygpziR~L&;nb-a_S?NfiE-WiaD@Jj!M~vmiS6I7Z%x_IYQ8Oo z2%yK_O~Hu>J{*C7;oltsyyM}FEGE4Lp@$pJP(M7P4n;er?oMf8p)dT=`r{kU?+qeg zy}$t;^ePx;>YP)aidxr5^dD>`(x4a7Dv8UI^;H~$Xb!@bD8)cuyb zn_!F}QZQ4X5EKivg5`oL!45cO9wM9~j1?{w)(CCF0b!-b%N~FAIONggan<7|500m& zXRv34=Q+ z`>1!P_f_wE-cP()J_4Uup9G(|K1Y1M@;UGG*yk`DF&*^1`rO0k-2FxVzWyQpq5et! z^ZX0_SNXr<|Em8+|F``&`=9f_=6}n7z~ABT9^exY6fh}ZYQXG(w19a51p%6X7Xn@i z_?Lj!0yYGE6Ce(Z3Y;5Q61X~$3fvg@c3?+fU!Y)2(3m-6=8aK}d3((HF~O2@$!C%u zC9<)r#(p`L6*M+zR#0-#?}Dm>wgnvt>IoVMVvh?SCmWYH?)T$1jN38p%DCQfd}+K? zE?p*lNBU>!KIu==hte^@*}(y&?NUPKMkG2^dd~pEkZ|{F3n>j}ME07ogP{rx;gY{Xiq3F%sVVQY+=~DVIPEj683r6p0M_?uCU8t zycyzfqIO1o8Ff7Bb`&dG7(Fq1PIOxIyy*Psh0)JPzZ?Bc^taL7(X*!}PMtUP z#MCQO?@fI&)qR@(H0iXd(>|WIZQ7U9c+)+mPl_pzsf_t5=4{N}7(ynH#mdyON|{mi znrwsY&$7SB{wg~syDNJndv1nwM)Zv28HyP>Gs0)eX3n2kI8!%s<;+)RzCQD-4M#v*yO;#cE?KV^_wmiM7VQ8+$PJ zLhRMpPiOC(eRTGz+1KaXp5q%gF7DO1#<-TaV{vEVF2_BHW5;{MKNlY!KPO%t|6;r` z{`2_O_+#;3$A2H+8-F+6Bf&o*IAL-^VnTMp%LyA3-cI-^p(Wu&!nX-m68aKQqI=?V ziD8M;65|r(iE|V46E%r1CBB?!O?)Tuqr^Rl`x8$jUQE21cqj2;A}2|Zq{ zd@%V;^0nmN7S-Irw^tp$-mGhJZ$`_O`DI1h;C^sv2DEBDals(Em<&e@lV?xH1 z3|U5EMta8ljG~O+Wz=S@%6KJXXGUwr)eL*a{fwauex^@mVCMMD$js!-%*^?ji!*m+ zev!E^^HS!W%)!jZnL$|}X0>FU&+5+lG3!xQQ(9n^)_{j`YZKi^&E1RuokGalAaQxG`Mt5sk(GU>AKQQrJt4VEj>|s zzVvcwU#W*CK=X;_sOATad)b7tgtCINsM7^}>r5!KHYtxKb#v4Z+`LSrsnm3>iW-=efJMkw=X#Qr=!Q4U)ucsmd#%z@7=if{k>QJ z;_=D$y^$@`TM}B*S{Ae<{jH?sA3HDYzm{I z&sHq{4^T@31QY-Q00;m8kgghhuuuLL3;+PNApigq0000+Pfk=tL`hUHLsLaWNmMRG zPeY|zZF3tplK!5m{D-cj>efy%JlpGRyxOa);>*ZpB61Xx^2>d>0%t%H>*0V4U?efW ze!Cl(0Z37bc2}h;Q$wK9Prp3fjq$hNj278=vVD^v9wL)l9-B{V}9r(Wq#7##Jl*iSZ34yC2lyg8EB=+#@C$o6Cq z#DA>PHRyFBHJoxi7-fU^ejCO7W#by7tW!k~ma^D_bqDm@8jton=K1vh-+g}9oy(qN?GZPf4R;(u+|Tsw5^6R`gJ z3dV9{q_i+18{H`@|K0t%AqpwZh#6HMdEi+~Kj-r&6!T8O@6BWT2ea{iwEsUm zex&z@Cj>YRqV@vz+A7DK=y@i|(i(1N;~dsfxW>pdH;p7F6%_?N{mn(v$bzV%OENEM zoGnK4$@OxQ&mg~qeE3T?T1Ga4%XvQKinq+KVVr-OCH&N-;d`UX3xF5%Z2S_2`koTz zW{(HKm0UY0w5cgs*I)}HW!$*pDSoxrytIf8PQ&5zWB;ig(MT;*AqpK?Huoo?THRj|S5D29b zEA(yXtUBfpRg^A_L5KC2jPbLmiExQ(aJkrNe7YBo8UVBxLmpMC_{v0yi=v!FIIKLH zJB8Xu+pd- z8RD)7(iMFogd=lR6e1*|&{eam&r33Fe80lWN#aQECF+URX!aCC+&6@PqQu-cb{owd z$oiZqm2I~bqOsBvHMQPU^%3vI(@zPI&A+bDEGy~mq^vpW(Vlv}j#~KQ(kgLQ2WbT9 zaGq^#Cn;3BF1eoy4HGM42#$a&!g;h}mZ4$>L&V7FvM!>dD)%Hd)~1q<{nOUOE-wE_ zn@8#tsU{UaZYxgsA-)?XC%Xob&$Dr_h2ixR4yY$YV+qBNx{-^1NLBQ2L3mn%D5a&L zE$QrDXafzGkSdmt2PxR@JJaH&FqrMBiKJ2`Ws=IVhAq&FV`cZ1IM{v?&Z0i}+9WG0 zJ#4Yk+@_@UYj1QRt?l~2QishvW1_&xnvr*~Ur*Ds$FHcWYK-6q4b2D0>GMS!2G z)5#Hmfud!Pv{2SpoUYAatO-9kYQ_IV-NW8U8#wx*XUO&{4Lrcgc4O^+PnZ zcCph>8l2g+_G3F=(l3_FH7=@9dWtTt& zem?XC!zX-{!zqr&UekF+h1|4O;7G zIZi%5E)WOujf|fMY7K?1*UIcVmfWaY*=ph?yq{;;%wN?F=GovPj8#kk!EMyB%aevR zoXWJ7gq6Q>p=98~vP_GH*D=VX+|{O})TP$^`&WeV``2%NPH?q%YOzrCV8bPmBPUdX zQs32mh*yR@I$HSin={c)r8Q*Y+w|#DR29nj)K->|&0N^dB@KmS$Tyx0`MwN=#tEx! zN{&iq%20OOU3~HE2BQNR50&@r0gpei{l^2+tFKnl4{b}33`Cway49YBD}lPUzKh?b zvojSSKl8angHQw>NvU2tAtYAPd&Sfhvi!Jd@PjnsMfVxGuS7xqRPNk3FTifKaYf_! z9RV>pEslP>fG=Da*YIqw!JB9qgHV!FF(tV$Q}#V5upG z1VQu^NXN1G)uF413D^0{z}WXZXheNT*H9XLXu7g)9AqlS&F-hb zT(w1Y;Dc?b@6(86&l~9qj!fH_IC?(s8Z@C2zV)9CrWp+L&n>4c<$af)e6ddnz}G5t zMt#)kaVy9j2fs_ivL2ndNeMeBAzCd3!TE2Zck{g z)yC&!!bO#^{GJC7vV2q9We5tN={rx;hrRUSMM|@hxR!$DxIV~xdgl<{645f0ac!vc z|DSobyqVAbm-Yp18%I|ZzUHF=qa@-AwqVIe(1dW#6<7IS48xn{GM_y*VfzV?>`SL~ zR!@}{Jd2U8WlIU()|c&zF4D)(61DaZ+Ij=&}sxbcghAE6f?fb}+qW!mU%n`*mSd=P@BYgp;khuVjCU-pbz zXEWOO@yB!12@6Dp+RbN#AIIo(L?=7W$UBaY=g3QTBqM;dR%|2;g+Va`?}uAy4(&zS zNdxYiMiJ;CbUNwPD9whx7b6Gkym-si?N%728~ohVe1T)TE-jk>GM`Te$?NaoWHy+8 zfyoY~^kPSq(sSsH{J~tXN?H3W&M^9TQSFP?_8sOtpSDevq8X=+T6vFRs{_1#_2w4uQ}_Q3^6502 zEf+ob?Iv5$dj|YCym^lvzs~3MT)HB8n=C`!3N6T>aa&C;JompD_)5y?X5%yE-K+ci zdjwtTS~|#zt@iX4BH~m4y-e@teJ*RS-@bbDm$%_&)7@6aWGM2mk<(t{O{FN!FbN003YJ z000yK002f$PEFc zs&K_J$@_oSvB4Sb-n;*2=Kc5njE?$|UfDj_zLElGvl(!__UMvs#M`^i99{b4Qj$#P?cI&L z8yjD|G~>0MM>}g{s@jEHv=t35th&_;1B%CG9GBzR%?=I@z!QY=%cI{M#lJuM>%GB{ z;*T%?SZPI3T0}(}F}gH`?lg50$DQk9U{bm=iD)>AqS0s+(aOY4R)~t(?k8DV?OZPn+8mhOw**W9*AV!i!Xbjj2l~ zn1G8o{*OGvr=vH;*jJL7iVAB_tSu-`V~i3pPdH$(93bB`jRP}v#w@}nrySS-oeg;K zetsCsASi_Utv6#f)+gohaDWu^!$Ax@IXN{s@3+oc>a67lu`vd`2rS1Ab&YX78lFGm zx_+CbGWPmEgjm*To9FZAjU^+aBYWmfc%6Ouw|jA9rJnWto#(Um#Zf6S?*o6q{ylF@ zvK;q`KPNb6z==BpAEF6((WjhG&;@<}G9CpPHXID7U|nH>`!ccgX8eQ0>%SI3X-n2C z{)rW!K6-3@b8v4#6J`91ZQHhO+qUsy+sTXV7u&YY7bh>aZEU`+-L3t$_K&VxHC6Z4 z)ZDJ_o;h<)>;7p*=24mBocx7IGLuyT>4fWp-^OA|eqMyAL6TiGA_-cChR3x{X%D2x zP3?2BJ(@!#jD<@yZ+-L%!x}K#n3N@TQ8&(agzF6Y@<$5P2j8m?@Qp{ef01OGvDf4O z7xNfj;q=MMAq^+cPyhXDV;aYxe75J+OXYK$P`kq;a0^f7wfktx5B}nb=R{lkx&yug zgiTMjo+h1orztM5h*M6;{q5drg-CvR1?6|v=VwV_@uB1W?qCdvJc~jF@=}X~qrWc! z0=W6s^n5iTuDgk@&CT^?pr_^v+fu}Rw-5OD@s3iy2%byGxex%x#8jg|S-(^oJ<_mc z3{&p$W7kQx@avga(K;#z)$kb=C%pSxNKH)@X(ffTt)q`%rM8sDd52*1?B0MWPpu>9 zw{u6LYhT4epR|oUT>0`8Bk4bDp_nPgmWEt`)oV)ShMrKRDcI)u%z8DuLnf8#6RWjt zM6Jlc<~$94gJ&nYdr)MYvO=jBC9!+%WD8&s(QE;MxDw4EUpoT?UPOLYK@wN$ah#L; z`rGq>Kb?0S=Y9s2-F{^iEHx@P;~KdXnirRsc8@;UD?pd$&;+9yadMaMRkE{{#WUw# z4GgOw+iH=`H^63kFy5N(@YFO{ES7(eM$_4qC1$4c-f`;_9geNO4#w+G*!I#IqGqxD znCHc`XzH&%lN>mgqrZXI={?0P1CD&?_}gkWH$tBkM&2ndKT%NB_^1t9_wHFzRyMp0 z7T-&^1nlf0{Wm%2eA4?u!x4&)HwCi2$)7VtHA;ww-)f(}T&yAy9{z2^bi6!W5B2_cI0FG8Uorm)V*x+*U*SwnK}|(WN>1V@oV`1I8+-|T`#*h8 zePeyIEV8V!jIrFXd|13NC>khz7k(jtf(C<%fQSH#fQ!J1;EDK(dwLFT^ADY&!j;A zpVJyeAz3k1Rk8m>*~Iy%U`9lsXR-JzqXqHS&_!{f7BNWW+9v&7``+)ynU~}+QWQ;# zCnZP=U51$bHaQcN5prBD2NL29(hZ%~=s%Q`$VinH>(|e&dU^7t_ph6-{}^FgH>SM> zX73wlH+n1)0nGhx^~_M5z&RmfN5Rg&T$#B%xf1$hHc78C|1-p~C?uj_C^`-R1 z8<{u@0jLXdtIa-2D#}h!br^lPb!V6X3c8Vd zNd}cL4FIAJK$HYk5=0>s63QcLcny$5OB838L}d)gtdkZty%(bT0d}IW#ZWCJ@gz_G z^9`5B_fN`O2ko8Xe@3x!o}YM2D+2$$g6RHTjP@WuEBKSF{_D?5$*YU~WGZ@bc~v>( zdTSgZ#A(M+Ni$U}4y2J#C8VG>Ya#Rgd<91|Q^`X4Q`EgaF@1FBwqH(iuwn0r5<`1Y zb|4zq3nBT&Qm*MF5rdRT9NyB|yYdPS4$qfUS-W;^8>g0D=K)fQK+(ge8}0<~WqqalBzv8;?q;6Ne|dVj zdfQ){N~4DlTpB1nw$2qxIgY0X6H^gzoqqnmpp0@dW z^ZZ|DQW{fSQwX`jyK)Nqd_@xgsbR8OxBDFx%jd4c&saZw-`KI@63Uv#ZOLC+zm$Vy zdU}3?&er8L#L(PNe8o_!*E2Y~j?g=&0dC1wni1Zuv~%eTVDY5Mkd zR!aI9c=QM{lzLDK1U$V1xKr+&~ffPK$| z5om+yeWZ(n7i~W$$!Kk;+Sck)x~!u;$591_Sy&z3SJ=g|#yJ*e6M?V7MC z98-n#|K)69TPOPLo9dGtPqK*-&*7>L2Hu46EMitN24dvIekl4%mB_?e$q${H>{@DN z6nw)99XBm!l-H3BjRt16><@6mdlf`@l;{$^p8PfJcfOq>vHgi=fNwjAMzV8E@ZbLV zszzFC_y6-xWd%6{PEF4L>7Od~*875pzC~kf#7^yqNz??4n|cMpobj`g%|oO5QFOYI zp?|5Q{0SVt0)Du8pdf?lG83#!;wk^YHH1Pn|4mI0aWt@I&R=YBIE->?e%>7KI=w2c z3{KXq!!^e;slS3HbxHHr{*qEnVp0OGphRVa?L=EapqyGtp<=8`jf7G z8%Y;lI=h=Bn>XIxn!Y}|zuqwS)VpvSe!T0sG+x=-KQTqOppb~srcuL~i0I$BIy@X* zTf;KH-(2Ty8)~jm!ApZH*QXjQL>H!x#^QKurQ9efrbII|(>Ax3Vp2=fFo}nxqcW)Gl+UL{v zqzs}WGhq3Xq(RRS){NO@O^a#uMT_%Y0~4Poe82Y=&$~Z`&s#@U0@EH{zM7p@QD!+X zm&Vk-UwBR;4So;5`zrJHY4({QO^D3e>E8^_8Y3OGr-U+Rf5+{Z3MTJ+9_=CEL~Mok znW5#`RI)wyrgF0W@gK38k=bmNZ(s7>g-QP7v0|-*eI%nvnu{e4tW5`EtD=4KL2JM!lR(|m3QH5iijJKUI zS>FR674|p@fc`8S`=FUHYRrCEeZ+P>@9c7wk=pM@XLHc|2GRQzT)&fz2+iYrVNvLh z@-sd2e0IS;XyWdVun`q;-Fe?d+vS}Lkya{pHb&Vh7}a7?cp_yI?t+IS@!hlv2g1iuU&Gig*K2Wf2% z3E`bET&+RS%Rit%295jG!y&0cV2qMS+K_94qD>P2D+3qUoebXE`jiE#sR1{B4X4c# zysw!z5_y)>D#&y5X>V@}U^Lw$M6@^Gk1s8m+P5bf?ls;Ms0jIU^*jW|m9EGF9N-sR zZtD2?xcRuf{Er*H4vZIOEt~ufMjs=%JNd3I-6YM_sj{eQ%p0*>{%HQA>tQZ;SP{r` zb(8G&d$xLbLL*xz6{iTQV!K<;1l54!fKJzLu@dI_M|$ek33Z8~dx4T+%`Nt4MD_SM z$p2h{jIwxtpZf-6qn(nnetSBaoXDV(_1U5bhEI1%B+3NsX&CxgRo0_Ec`x5wZwItO z@hs2dw?RqiWKj*PI|=g^LpMiJldz`aYhRxw!+@9G3apuRws*{VqO>8LDS_0Orze;l zYDWI&c2;!e0Y=Rz37E{EIA~PIcHMU68SkfD?CV2d_ZcCKAsCCzb6kh{@gKlz1OMJs zE$dr`l*aSz?P#~;=|GtEfTJtf_v;E{o8G5ww)IV}^7!*|0D}HF-=XMBT|;U0w`bxu zh%W@KCn#SXNXJciGW@TmM}{=UgQA@>5%IeyxTE5m2h`sAu1fCTypI92kf>?gOPCxB$3s$8s*|O=pXfST`6Q z`SDJDyASBp0);%OXrRNk9+e(qEFTqb<|INTb zWdu0qD~Vdm^*})C$iV*-5&chT{U1Q|e?95NG{r8uy>(SrmKeK^H_g+r!hn$ykO}o~ zf?5NF2K5d~ZkdCC!SL*?tK@v{)|?>Zj9p;MK}InPt?(z4N{HDX>qi!nOC+XE;+gU> z;mYJ9-!Ngw`S#O?DuhG_Jy*7l2Lu^U@BOX`uCL#H=Y5YZy6L?yf5dpaFDIFtWuTSN zgef6TT@p#bJ9qy@O;ju0REqp;CB6;5ugBF|u$&tj&FNxY%ndxaTa)%=X+?yr^oO;rV5x>oDg9SU zN^u!0JiTe2DL!B>7?U1Gs3Qa*E)X7vuFjS#3!1_aa>ly*g`KvSRw#1ByaoA>2trK& zmosg5Qg}ioK431oqw6j?T?Eo@Zkjm<({n-0TT7J>N3n>R#qbt(d&{l(a-t-Rc|zT) zS5EWZOk9^9b3Vty;r?GrZ*KnnBy5+b3QN~Vbyr3O>;Z?P521fSSHiA?ItU4k!_jPt zH|LkS8KQyt?(|_S1Z<#o5p$ucIc3FEyVk#?7(}DrmA0J&ZZgeoAzJTfv?78kmkl#& z6V`YEMkysA8dlb^c=g?h)#g|ejZ2(}(`!gGb@`uXiG6&j>vk@l>+INE&F1O?c-(1L z^@P{7VA_hwCPNpnFa1&~lUbA=le?M_w;Tr?zq`h9TmQ0coUY@!Ov7s*4HG#)SKnD5 z>6bpvDLBjt-E4}n+*FlJOM2wAKsgAmgO_7-OG=04b^w1qmn`^CZ`x~zJF2h3iE(I& zG8a))3IH@zI>T$$L{_efliDG@_%40Hpl-dgZd$~939JXTjC!TNTco$`)=X}{(ko62 ztP$p%Huc{$pkke3%ek8ZpRnU$@#Wc^0g*SZqA%`3+2%F5@PY$EhT4ErJ;}$Y8#aJo zeD{O+x{WYzm+daR;cn3oXpJUuEiX_44jyT&OG?vQ;EW@LWR<0N9`xZ8D{M# zO4H(@?(NBfdV%ngFI;U$H-;vpA}*0Uzhuyd^7?D4o1)Hu1!zj3pF+3LWg5$W)e~zu z#3&rlw+^iCivZJ@HdEOx8VteQRZAimE-rT%P`$}Z$r%MR^H(}Le}|FYvNQ#~l9bGA z=jB>a=#kQ6QNKiO0XTrBX~GyNAN1i;RC&+rr5mJzdSHP|NxT|`%sI{Rm^LYs>xLYe zm26PGo6nT~g|u@^{nH82ud@OxE+Q78A*c*{R&6OZMkELn_A)c<9gUrJ4BDW)Z3T7H z{0gEzKdTAsajT?$^6XE2G3b+=WGj&?6*?&bK}c8a3!E5DZ~s(d3T$uxSR*6qZuJyM z4~+QDV1v!hvDRc9(}w_4h)M(QjF$>h{}S+(s0SOUV{oAP{RdSY#YSIwD6^ixilO+H zS|;yO0pmgahCNtX4m^D)7Sf8ouTJY|Lv!~NnWKEz8QM;^wE=nUs=|_e7(TG%-eiES zU`VqjPn9mMMNPTB=o~o!atCx ziKVHAlC^@FKP`7uDOTa+>o&HbpwR`(gHRDHCD8bdAa+o|u<#d1fL;XA^MH`CyNVS% z-PzauD1rXnHmHNuXz$GBNSQ_ai|UiRN9W0`Cmam(Z4h!Br2R-HT65SJU_Dj^Q;%U~ z!?t??%{N_4El}lKzd09Sg3Mm5z1lp)`O%Ui_QaK!t5OE^otCHCd0`^)JlrV;coHLZ z38en{(Ch=bS!3VCCgv-P_t;}*1YH>JKDP$84T=&z*OFdg+xI)mOu&C181c zy1y<}EfAIP!ZCrKSk7g_ap=_8YzK5u<`;ZeO#p9e!pFh`)C5WD*u74$!^X?Z(p9ko zExgJ#JU}<0N6YMo$6$lEm{{6MX#V3pgXZPg;5ft^Ccam6A`0;)1_`ujovghbHFutiAJP9f5|fT2Rxy?R;F z_*e>Kg@89ENlX|k-XbXKTT1^uDQqWRqFm`A`Jo{oc&@QrS0ZaDBeX;CQ=U3e3;)m7Dz z6z(h^9Ku!uZX6_Y;y7j>qO1uC*k_cDdZ1MW*m}Mee5fy&b^Q%^Q>mhj0+b1O20DwI z$2u17Gwt9T7+3+=f-$d^ur>r3g9QUzU!yD`uZBsZ z5ArH)cvBFOavby89%po%!ffj@$U8&D~vCrM1 z{(9Z{AjE~;_G!;)_9|!+kZIcht%bS=%JCIFV+N6TA)HbcL8LV2*V~&?=5xzya`bmH zqG{&MY5I$5<`K!+3|HX77tv6kyScU<0~f-_&SQvjCqRWAvu&0FA@>B33U`!n zXTr&h|D*Dfi+HPU^iwBwb`SX>kVmk)K7wg?UEO5#CH(7nmB+IKHiVk zC7lx4bnS6JSNeSn`zo2;=){70QCuh z1fBKv&&X8=(kZaieL3qvv2Ko4G-w;%4QureP$$rbjmI|aRiQQX$|mo#NfA5YSy5}b zmfv1l%Jh05oBN%;qjRQy!DPq(7~>eUXa2mhBq9eSL%e2C;=UlHVMvO{Iq<^wJ_aE& zEZ3VqJ{1ncivXT9r?fa&YpP55qQTtONFLmQc~`kPk3vk6*e)By|-R%ACZAwtk@E?8pDs4zP82(VB~N%LW4 zM*TOh7>YqOQ(SUn-r%s&AFv(v12bitRZ?7lHvxSjn-P{d=!Ki-I&KlDCQS4;rpI5Vmsk-022l-^xK*6Q4*NBmlUB#P z(Yw@g%fC#eLj)>HEsq8p8=Bvte|cNj^M?1~tUdLKQ$PJ(s!7R?NE$B6$1QBUDR(~o zy^zGYi^$<(OBAU?HCE{ryDmfoZ*g23C0b&6VXC8r5U$wT5xV?OsT8uJgi}6cJ*KZW z=E43^BGOC4r zk&`%M%nTug32il__0TyY3Epdk!en2X^3W+$qkH7OPAN^PYZ?K@VRYPiDZ1XcJ94jO&n65Zb_d#>N&gfz4o)%F?a8dZiVJ67P85DGMG18THd3U!bLQw~|>UY5>eTTSssk{1`Mqt>d%m zyMLhBo|XZy#}{m<56%IGLJe!3E@2b_8)N&9@B|!KV+e>mZ^}Hc#}igB)3B*gA@fV8 zObL~~cb!-r&1G$V!`gw!Ne)0=vG!yaEXRh%1^%*xH(TZTV1z7;4~!9J6({nG5r!~B z-5aH}B`jo&RZ1r)tP{eb!b}xn|Du`(MgU^W495Z5u`GafdCx7`7}U&(M}x2I@Ksp4 z3~#Ns$C|UtlwUFq&HKInPUU^sH!i)T5t_%o{$B2SDd=BmT{2Mn@A4D1&24A#PH?)Y zWFHC?V9S{F2XGe2=?9*WgalZ@$yh@b^$;0QpWA=W#K)uu-TJJ*JRcB8<{zgQOfiB02Pk6W{Vwo`zCaIe-=r%LL@o zsCtK`OwgK+cfzhghq6@3QSXPKpX|ovj}n_KCee`G^;Cqf z3M%Q)L?4Kht~b(Vi;%J4IJMGf{X#dBGGCcAUxb#c;Hqrmh{LrC?~8mbJskCVF=;;5 z;+_b+Ic+a}LP5`q>_6psuU6fdN%f9V^a!jT7i>-wJcC_zU9E9Zhc7#3zjzM7Ro0@^ zTCe;yw1a%&?780kXO-TsKm7&IFSOE{OLj4+%v4pqd8MGE_QPXkt8e-s!}N+91_?9x z4ygDDBKrQ^sZ=nPH5-B%JTe&bf@Yawd5p|dQ3{>%Rr&+Gu6KMO@hA*Bs!wf6*Meni zKJ{l~{RLk0O0MIKl??c+b!pe)1sjACLElmmjW^o(J6B*dP+fbVJM5MqUKab8-kUV14ci(X}<}od$W>k@x22WHgFl9ms zXl*6TzRe}ln=-tM{pE!4&Uq(aBE>Y#g$PltA>^FEk<4$}C(2m0hl%UCWg%q8eZ?d3zCQ(Xi13f)1u)|S5MdG;n%Y70bB zj=bX1=m#TTGA&rQXMdF7+{2U}pjeVMbU=7GyL?5LM;-6ziy2aJnI>yt2ldP|aV!V+ z=&l%a;0%frTCMu1s_JF(JclgBbfsFE=HGUp!dQ-;^rPia2X|P^hL4^Q>elGfEVOlG zrzUf2T#D1Fk3GNnJuDl zyqTvlG#+8?vrFM>h4SY=W?wGzFu;Q4(Cmet*pp}mSTR!%-o2B0#n+bTbJ_|w_W*-FJpqRoTZ)Wi(8(qJnwDkR9y43bR* zBuSvn8S}Y68LkHb<`T8PKo6;~;Rmg~0)pldXkNVK$gllH`nTr!wzeN%Jl!wYZK&XV zJhpYk8+cJhm2~L_jZ81^M9REgh1T4Bp#nSqw5Q!}A(O-O=eFeSS8t8Pe+t1TTxMWL zogWu-XckL+9yusO_ajC-xQ{=q^XEzACRC5TN7OLHmkWB>4Ld*G5G$p{bA-TqLF9l?jWfS|M17%!DQaLuP@@MKVFH z@TcNxGso3Z&P0D%kcI@SnM0Q5${!F#sF)*1xG5Hd%51EOs3<-%5Upf8<0#zVo=T(W zcYepHr7}OAlOBxlFt{n{?5x&4b?cvccP~D#!*g_?hD`|1`UMNl;&kz3TmtcYTF!VP z1H)$@t9_^kA!PlIJ8Gh?1jaPBarIPu^8=zk+<2eB>)=fazu?halp~_8;|LDa6%q6& zryn?YaZhh!L3O$X#V-{wB=^TK+@mfmYXGYi({oIUOW1n&eLKpOf;5*Fs3BRtkY z-QbhS&fv=LK!4sf56B6bcX62~xCCv37Vq-0wOzK&I3P?I#f#6L00})6B$yMJBn}ND zup|93m<%xlrtl&O+%B~?T?b6o>`yCSc%;G3HDg&t*oG|1VboMV46Wkd8vWME-dm9z z;%uyC5HXXT7L3|cN-=EJx9Vw_|hvlsWyW_ieIamW+ zcKL`#EL8wt8T#)noN`}2XnMyHzUw#zZh|w9J;LeYzw8IaSkb?wkwp_5WJ=;!D&$NC zG)b~MD^yVZUOBq9ppGa04sh{C_p@)ifQ#jBlBga)y7K=Bg0aMi)<8)kXZH!ybUY}Q zk+=i=QyeOn|NeTiB+YS5(6`-86>|cA!S;USCKdU;ijUp2sh)!!z|c0x>Sqe=JUZG6 zihz~m@NXRmgX|SXdO5fd{FlumS^Q4d_Aq-J&}xK59nVV;Jb(Ld#@A`((Ppu3M!-5w zaSOAw+Bl@*IHZ4ys1-F#!-+Ru>GB0?otCL5C7XsAyzO0(^^7@g(Y{BRF>kV;y$)fk}p1G9NeIWp~x#BD>>?GkG=`D4R+~FW61SQ-L8KhrZyJv4)QlzHksn6nk9Gy*{!DS2^?e?wf2hwyu)M+uDJXZA0)(803574MGyS20k4|b zhN7WIM#@}*9}^#l5Q?#0>t&>5w;bpV2@S8hNu>S=yM~3n=3;#TBAD8%)TwV~cwZ6k z+16ZNbD)Le*2Uj!fVFGus%owRK}buxMOLy~o6Pp2_sP3^H{B!a#j~IJ={8|Idfxo6 zG4zEJc^59;x?#o#CD$WF6h3|M#d&@6Bb8lgu&SFNuYOO>22FzAf1?7_XsH66%C&4; zn+GzrGaK!<#79~i8=7TP$e3f;RVxv*poB!>I&>HP$jQbV!!$<4`$v(H$XgB*7>Wfs z7%|r!FTS)c{=oYcX4-|iaIfXIM7#{0X_6qCX9YR)mB5;XeK-x+fSZ|T+)4$LA>5L4 zuqpw#si&X8f)m0=B0P;3ApF<^&*}(p)4#dmcyf0KrgwRc>+h+8;=|w`hC9F5(|>Ds zP>AZWJ$y@d7>nzVvQ;V79+=zdQ#pMTi zZ077GsP}T-liAv~&a2uO{8#mK(F-WLO9$zdhk5rJCW+2jl}HOd;=Jspn zZ!M%hpb=}FEZ&vym44CJ!ykE9!DI*1f=jta?O=n&TBA=00pEiL>B|@*Um+#SVZbkm(})8aj)>IHr#3YgPR`f>v!__~j>Vz&44@WyRx1GfjgGmeFD zSa!4MJeEO8q9rvgIZz<{eb@-v<#dE zm1VsYME#)=Ng&{j2x|4HGc%|9i9wSK(ZtL@Mkux~petpONS;RqfAev$OGP>%$NJ{Q zr}OCk+4+NF=$OMO&mV;M4fwYJxqno;Gfo45XofAdRPrDjc6K<6*Gx6AjsW)rSQ5ac zV^;8y!b+RcRPES<_pWUm0M@(US2zppV5x4oHVelnJPCaDEv&KRj(S5#aa1cvy24(RBtc->>B`o zdgYF{@DG3^a{Y`cVus2T(gny2^h0FntGY_yH@}u)uM%HNeIq9Y2erZIMXs_)*!Fo8 zG*G8_XI9G@3Nf8tdE{c!nzu$+bnh6Yxi;#ji*SVD0|H9C*{rpA)&-z0|MmbmUQk^H%EdeV{2;utj4mWXaV9dB< zL&MT1O$fwE(FwrR!I;1SeGz8_eeIdBF8V-0ei<1_0!s+nJB)yLMl{8auXi_!aDUaG z-Q_rxiM$@?lW()hdo^0>Ij+4gRm!{C-iLtG{{W(S6T`vIpVdGj2`t?~ST&5t9}Zo0 z1M@HRTAwY0e^(kK10_UY4s8dO>t9%*Nfnaq|Hyf#^ZT?HU5c!0^9<_MSGaYP&;FwW z638{f+*7+7-iq@gJhOTT&6?{9v4}H7C>Vg)!2}a<3zt6hCvouuiO`^2{BmHfZ}WS#S`7o zHHd)~MV;Wr&4yt3oH;Z@@x=FdrN57sV>KOOiB*V0j67Ykh!783fkq3h0$2xRo3(TBWMf5Lw!^F za2w#YRRjYJM?MOf^c~Oziz#M0@%|yg=7an>Ho8IyvAqmmTGaa5(yh^s$vUFyAJN?5 zKjQGw1l6!ry25Jq7mrvlC*ecmWvW$)(&%Ve)%71D^&ioy$@uG>sLsX1hN>A)MOHMe zo2m||-#MUao{1RFHjjE*j&$L-9?lkCNfvwlO_m*3N;&QyvJNk@s>0Q!%X2Da+w%n% zT5ceZ6kg!>-fsvG-Bq7c*O*qnmsIKqdzqawA`PlQ`R&unqnWt5>I2Z_xNkkNds5hl zR2#|`qZ5Jlq5|Mh`%JRct6&P{rWVn7Ff9$jMrll=Oy)D^!yhPjjWu{#~Kw z*g&%O13mwloF&fNa_L{ZS}^lqe6`fPp~xm%l1H{t#3*$B<)n3V2NN;V0P^(jc%b`7 z&`8VNuK?VH3$FH7EBmGRs@XnnvmIA+RBJv=m;4q_s>WC^th@F;c2D&HTfrJL6h}OI zR;3NQg=-QP2j-r$XHHQfvUe$RFu@ysay3%!oJCBfBFXhfTYS{pN?bUY0kVbE$K#s@ zjhc7770uQPICRM(*Kc)R{fy{?An{c~ac{fGC(A=yTQ$>Re>M_M*(q|Cx-}W=@Zg0O zw0G{LTyxB$A~jsl*bxI2sd&b*v@duyiOsWq4NYkUCUscsbhy>kYgBc$>_f>cm221d z(AY+81d(bITD4PeP?=bl$k?aWo6EbFey>J>VdPIm%+FP*IXirnw7(&T-YPyx?`&mO z+U%M)g)Chx<{rTo@zy){K^c8>Dke?p=33nbrlbVU;-FB6iyJ%Lt60J(^$8KfeT8f9 z&#(ySE?}o91qOuhD|FIrnnFeQr!Yg`@zl)1(kdW&x+?0B5B}0q99N-4 zV=8$G+IjkjWL&Nr^f$-SLJ6vO^(V@4c0x%1a^~iax*vZI-#%q9(7d7bQKlR9on;vw zFAB2<~48ur97d2 z$|q(Fz`_d*-zxDg0ro zk8>rTQI-e&v465(xox_~kRw{bm2J8U?a)KEIS#JWvDrc)BWBW}I@0V87MUE(cs<9z zLh-_=<(EqXM4jEDcDcV;ZjJtBg7p288`?~;A+7OG{%e|;z58Ji_g>)}H-UyZNj5Qz zKToucUi+?Nc(h3YgS_`y%R05wp_z4RsB)ihPIEoew3jHRGjqt0PxqtnF8!Fe8jP+s zvuh|h=k7^K!@F+Y^K-35yInK9vjl!AxVP4N^Vsb-ftvl8@wv+(9n*D!@+dWNB260? zjC_=-(JDFRAGfp&8cbtY2u3OhOtT_PU8%jB_YWwQLgxYUTAV1w2N7$tjjG|}O6(d~3;(eSt~r?GG~_O&#wr>T=YGH!LL;0&Xw894~< z3x}g1tv=8iVfWi?5ddVF79VZ1K=O2&21`d0LwBok5B{m$3i@^)hqhV>wV{qFG{wgH zzvEFguo99VYB!;b(SuDiSK=P>Pvl0K#j0veo%bw`npfV9 z*#Z-e+gaDR+M{jPhdgwy5YOFMhP}_sdOmux8|(%@Qv9XWjPw7JJkX_6(PfNohFEH*kEu3Q z%=HPyiEc6e>P})zJ2o`RQgDDRXARTTO@GQU3cJN|kb;*S(jE6b6h08X$U2Q8mWCS0 z(6u$U5<4oD+&3`D`hbO%)3ENEza{wVW81CPwPoWzS5k@pcc~K}Eur39q-2t4sN~=c@m93< zAHkE0vTxaSra?c8)T2?4!Y6bp#gfE}{0kZ?>5|0TmoW{c?Vft3%dd84KMnLtH}NI# zsNVR#9j~1Jo37r3V2fGtmKjQZn%9y526r(RCygLX3V72!be&0GRXtcyVD?id0}jMv zsQ_-3yZW14;$7%?ye?D%Fz9Pol@Ld5NjQjiU?$zOliSs9|8%Vrc^g>q8p*oXDKN!J zi|sdif^J+`lUeD_ot3>)hf92Dt+F6t{1NyNMRI%y9LH#oJj;CsV+PIaxn?o?qTyrw z1VCE%BFc8WHbnw{a3Bk8P+&zd#J(6smMKRY`%d*&+H_s5$?*h-^2@>Nn+YQj^)b$l zbL51s^G8~3as~|YOb^Ovl}@};hE4n5`u&^BMDtNgafq&YfYVv=p+1^IHRs_ts&tn=6 zMUpc-EvnmprPqvEa_cBxur7Gr;Pshaia9-E##4UDc;?KgX|GSoTyDi$Msi#-S)z+3 zgo;7w`7mIbEcgUZ>fDIFhKK!%8|EP8!Kp3DypGxJd?o)n%3*qd;|B~MDxdR>zhMaE zcTNfj;bEjEgG?w)L(eEoKfrPO{xrJOh2D#3qn^aNZ)Z3uv4i`t*x_O}91gDxUv(a@ z+~m5i+%%YWvCY!TbeXyM9DE2#D*upJ9qohevzN5=piTP~wI2;@!_!IMHF%W0?DD3UU>1|0Q}F!|otF*zzO5ew~(xSR4QCkZx6&R5%0Z z?08WiqSu+Y@FKC^7e~gxr(X) zcqkcp7Jz|HS2z6G{cGXXF!G&LGqY&|4CuP)^aho{`vS7{U#G=eNfS>0$s?NzSg=lV z$)M#bY4<1i~rM1+^!d zoe=R_unF@+QzFgKE&B0qe@X;|Y8vU&0FBxb>6fpUTH*7;!vH1D;vI?A#xMsm{oOHo zH)sxes*kOlV#BD>`s?p#DSO)c%bUpS7ydYQy-nb);C+;B1b+TzW+%2PBwTVQvR^v< z@GWPTr8V6Nd}-}Z)V$E`nRh$W8p^TB`!@V%pN5QK+ToFTVUe~aCB_z%l-@cbw0Ue) z0XA?)rNBYgFixu`dkVNUF|C0GaythN~8Z&{y?>x2*5w72}l_* zdPcSFD^<$Xe~jE{`t^`q?Nj=)V4#E`UUlpA*2>}_HL;xy8ZzO}X6741+P~m}V#+jF z$c3P`Ow%5}#1++DPIRKS3|5W0sYQqsgoM$}p>2ZP8~?jyBJ@cGg!zZp3hA=4 z1&OYM;yW7Ob%(wZqr>7g3Enl9I@0feSmr(%I*~u2Tft&zVP=1w3bV(v?Y911R2l*#BNszmI2^MH~%Qi%OX zWsSi45XPu|`%Q&kcm=~0bJ<_g>S7-VE*d$MZ>E+uhsWWRQj$`%iv7|ki;*5A{}fmq zhj~>k>Ighp435o!e`uOty^XD%rPssF7Y72dJoQFJ=cJO2AHB1>ODMKHJtReL(Oedvu zl3=qb!VpH8UHFZV6P+BNHIUu6P39G>2 z;|=wAZ9f^mRMkw>!ZG>GM^bay9g@G6uU~U>yyD!YgDxC>2Td=H&GZLvwdz^zO52QN zq3mA`NQ>1ZEJ^jFz+Dd<(L4mzj?UZ+<8StleVZ5yMb)?f!a1(u!HO`WJ8HBp^4Bwz zpMj)t!7|qRGIFtN+fI!xrTT95j~$C%(2{B>&}X;+c2$hOuDGdZt?=A~=2OSt=o+G~ zc%_Esojl(gI)G~)SC*Eh2)+6~k$)0@^aI@xgsj;g(8S}yOO({!`t{%%Ou&B zL6|7rlz_KU9*r`LAX-jOjEf!2iuTP?tMUDEvD{+whfBg{oM!6UOl&kynnNIN>RX?B z)PJ^p{!P~fK?C4R5;q(dVh7k^vmasiEwMDzRWrE?AHfa(LTE;&pxY642|aQ%dJ&(? zZ6uGoR;k@s8U;%C;r*dm9?V?CZLLn5?5(u!xwd~D@7=gn@f)Y)Pe#H>67|O3ujf3>wcPzuv3CMR(r1XcJvPvaoo0|KaAblK^?l8j+ zw$)ahXj%KG@DOx?nIv#M^X57WkUL*Vp*;dS)B6*6>E#kUr0er0k+O?(uiBu^No+Bx z$co(N{ZO;~%0BcJT@Gwd07PZ^mWilcO)g(PD;zR1d~%zIh82Jr2e?-ph4V4&^^X;|6FS2aS0zDC?!JQ0;_@TJ`4|JU;RZ0* zPy}or3A+Tad{|f5U&p(zNX1Ad;oFlPX=XIY=jkQ3(TmA&8+U6&kaToUs;=wk5xvF} z2C)51=M&>-7xM~Jdw(Ufg^XCg8ujhFrLq&Yzyx;Ea{7Pzl3zPnpciFaohSbg$99Y9 z_k-v_;agypQRLAz_>9UsP#Kmaq5)rPQiH#+8FFa!h^E)-+%6}6FD9@##*E_duHkUE zb7f`Zqu98>cicfC#{C&OcKLlGLhG?4C8gtse#AO`adPL!WVQ8i(GHF#Ls>7{dL;fM zG|BLlHG`zNHOS39;SFo^-MI&)H?Vexkzuid&HRtyOtX|;CA-Qwro!6Qz5+Y)XFoGDisB?Bj6A-Id1Efy4)yfNwoy{UJY3COB4T9@ zd)akmBO>5}S(!Q zJqR<>)^X8dHW&RAl-S$X z|G6evxzVo1UeK^h4A~Gz7s;oEh-;%O^{8<=ob;4Ym-ei$u=yALF;_hDepeduPFE6h zKUVsk31C<^a2TFtcGYnOv=ZaC;Q*6G!8WZ&3x&l`c^j;w(Fb|S9rc71p*8nSo-2qPEVf)mKQi`+4>jh-Q z%T5>pICuEoGYijSit`}fRu;<3h2m|J>~&Qn`^S?Kc^)1;yBYev?;NIv;((YFSPzagF{cNO$}X09rt$zv-~Jdn9K7tjePhM)CBXNeOTb zA&gqH@(E-JTR9Y+GbUx}9%f7KHY7 z5A28Wy=T^J>230r+r$7=T=i5C*{gED?pz7X$YX29tf ztYO@yi5W>dI`vhIcm+AbL`oOmumHyH&4csZFG`D@blu|pi^TszozET+v*PzB-&;E( zWs)n@-ShIA;qIQ7)=cbbqFh1lGnDUP@i)k|2n@+L-8VmFJZz`KX_fno&fQbKCLK^+ zRQ%aYOagRFStzCpboT@}jCGSXXG{BiN9ND&_z!@WF}dPs^xA&@n!^2j7@hpp|!OK_Jbq3wbWBT91h&r8A+Z6(B?w^ zPJJ%k>9oVHdO0f-Pf%kBV=AxMYz>ABe^d&(NJfXm?Oh41D8=f)K^6n#(jq-;bUg6T7N#)rM8I ztGC#V1zbH*y{N&=FFK&3|7mJ%0|8sG~ zl8hy;B_{hC`#1KaCvQAyuprxTHzik-ff%itj_+1uQ>%Fft)SNZOVzxjRAUSx)!21t zH*Ls(uT0@$BsDd9E^|()W^T;(7+ejjqqJ&{prtzhYCevMSlqvwVN24MtX8V|)5E_R zF<3Pr|MO}_52z+|$<~o~M)p+`VAZM#N_XRGKxtv1v=KoD=FyruWxM~c)2>-&Rtkm=)Es;L@$RiJRamUSJ&Zm5#_$Ac2_{fT=^0W`l z8Efeyr=z+!kJ;?ZJM>c|u6n%YLvvRmZ|yy?XPdR#gV6(=6OZhANJW<(lF^4_^i+)A zCSrmKx=@5ke7d`yI%(6rvBRB{>I|Fi*@in|FnHYe#=59K*)YTw=L{vk!=2_jJ;5}< zzBW^l_7c>%d!zM{ctyZL!umEglFBV5h0oIYyj@93!f_t2~Us7TXfED!1CQsJNRQxH|7^CET7*4aS^W?&=HseWG$b8ogB|qZh_>aLkpDg)4 zCL=L}oB<4S1~TBpWvQ(nuA%3x@2&dp|B|HmtAA80 zIH}ZFbqpA>FMsIN$DgeF)cb3coVL~CVya@REH8iP3Vr!=mlgQlo}b-%QbzS%#ub23 zU9IxzrtlXAZwV8BH92t` z;m<<@oZ--b(8ry@t*6)gGe;Hk&u$+a7z5OhaF)Lif716te!|(x#C4X!ib>B~#LQIO zgoH2ov~8BS-Y$>MIUf2TcJ80uxJB6-8<@Q4`L3_~>MIfTsg;RxgO(P-MAp}+!c=Hf zTZ%YTZWI^)<$bX=S*%Yf5p8)qRK5Foi{4Yme3cpB(Drd+2v=@uYyN8X0S`2;^&g29 zY2_w3x`K%CqEyv=uA%%(Ls?*K#pv9sf574A*SWrbjQAX9VgIco*JI1KVVw+McKA45 zM}3u=2DXG81%`e9JPe=o+`QZsEaEKO@NOEhGY91ri z)Iv2Q9He&9I!_5MVT!11&*T@_(Ni4}Z}3@#D$c_@Vf9DE==U{tQh|PbY8bBmp+d zvfzbHCX>Zt2@Vbp4Gj$s508wDjERXEHEPt@v12DroERS;KYjXif}d_h>Cq^CGJ*{J zot%!M(~)%mz^`<0Ky-BanCSG$(dpBo)6?0Qi*-4wyJG{gH|3i4)V4 zCZ?z3ze(v66VoR?G63LLIyeBKNIiO7oWcw%_PFbDVU0gj}9!YEFmRoH2f6HL0gG&J` zEpS>BeB_RT6oZi%In4TGMz`mPeY6bFV}QZ+4>`=TMLEOZnc}oU2xV0QFXnr~sT2sO zQu>8ceX&$;8jhuE|`X~4nD+Q6!A5_P00Q3q$yA3{3cWcYQb{n?D1BkHV2 ztZ+dr;bdPdb@;>4byQ#W5Wp`U{$zArNMD&=i_d-}h1FOcL#ui>-`IS8b4#7oKPGeE z)2$ueb5>O`u}WbaFH;p{4N9AX+O*4kMZ(h?zum5=Q`-dT89Oi zW|2HN=E9pt4oj6j+7q?==N9~40q^k2!z=8Ic=)LGmbT_KOl-vpWa@g3qiBQ2dpKaMi;nx-|qSxb2CJdpIsG?w8L@iHpCAKa7~fZ)q7{`?=M_ zpT>v7ZQdg_&+vb{b0N89Eq!aRC$42n%dNdzTBLKne=xW{XV`8VUxlp@Unjv+h;Ld%AmihMA$K z2XTA@qK=6eLLj0tNKiq1^GcA1V(#AD?B4xnv)Q3ra`&1zE?Hov4KbQzUGrFwP1ZFg zi-G7Ui6V`lA_<^t5REZFlEO9w#qbcA{-5drHT(G7&o9J&R8?13SDkvD^ZlM_>^lJF z$ub8U)p|5uGjP-Q!+DehHFHgDE-PfAdUmjswU~8TOIRt*_oUmpg>^^&h6UWvWxP`2 zxnx*1#ni(3tln^XxhyB)B@;%irl+D;0U@Z{oDKHUC&c!jKCM0^Sk~}{Bs;8Qw)~Kc zZNTzFuDIt}oI^U!zJ$#;`*QbFb5D}x@>ZWxX~ z=K>#Wr1Y@0Y9=>ohzgAoLg+Q)zjk?i{@MBG=U@5n@jsZCv&SdQcZruZH|KN04B=5> zg|JEZ_w(|v1>d}kH#{Ljysi3y`M5W(R68yaf;;Yen{mf|ZyRibnroVCLYNXx8r$2z zu1D>Dpe~wc|3CI902aIsU{m}LjSFx~hwlnsQ_bSZ7KHz(W|tLIW?$<*cD8D(*x8?8SXYgRn8jvl{O{>^`Myt*;nsR7a|=qB{)s^-|k>*!k#c^^uR7_U1f{Qgx9 zUI&DP|G(B={189A`ss&o?HQKbtGx=f_A0gw0uBb(nLv6^4@wpBP-O#)C3Mry2ZEGb zaf%AkLlLuTqncYz!{6Qd>MkXNJj6&z+jhXHC$AMUx5uRst1^U? zs@{^evQbcWD}2Hd!plGAA!=|cumB$r=5LRSB~q61v$w}__^HscP-00&5+ArEF-e#R zSdF%_VtP&~v80sXnTp4}s%j@#+R#`E?%P3?aU2xg_9?}HI>`lae3U* zDnAsp*!BwZ5)Fq!8k*?|uIZr$2ALOyH!%Op?F(-tH1zmN%tOKYh{mb`;xM#;F(N7= zHNy5xP6XCKOnQVOp#^Fvnjk5)1$IQ3?zX^S#Q)U-Br~oZf`(RKGuF_-W3TZkI)1u* z#oD3Ti2s*{ChSXK*@c@sh@a+DI0U-uXu2AOL&K*a&YoGmjgzMgNxn1#zBIkn$q!?} zxEXVwU<9jz@z~(FD#0)=AQj}`cn9mpVGm%Tx!ciBE_BAd$Y})Dr=!qCT?UCcxbVJN z?XET;B`qD@u;*lFI;I;g3zLyP);Eu_?!gMpy{TusYohx*=2*8J>y+bNl4}0?r(le_><)U# z2;W*0opVGJ`W0Lqj?OVC!ht1Nz&Vzi@u1L6aBpIxkaX+~vN7 zOpAC1U%Pw3b|DhG7sK;{c`@@I%m3OLR|HyIGO9Ht4KGsAv(ed^ZgxB84*wm8jx2O+ zD!P=O<__A^#b(Gf^&CcE-bo)GaQnxzYRDVAb@{lp0%KXSn?0X(FmU7?{tQidO0WQD? zCNZvUv}+?Rwxem9!Ay*KD7c}=dh*jiVX!ALTl~?x1Uw9=3VX9d3lGR!UyW)_e>ry$ ztyjdp9I(BFi%ASdfVrv`W+HyGNlF1) z3?V|+33NjesN!=oC8)5)8)>lik5`zik-BGDu=!>K1Ch7}HbRLQ`1*E0lZFv42&sqU zi#L+_)6{3K7Hnk*!CbJF291~4tJ|!abh^LfGJ@>wdD>B`jcPtha6b4#*hvVZ!!Cuj zlw2;U1xp=GU7}iiw8p4@oL;=SzU5odYi}2{u1AxSR`tCLt$kty@PIqooOPU?dCi!w z@fnzod6h8hGaSg?b+kqSBeA^}-chT8B(TIgO|j2#WxwRmRzDY9`7BMT{dK*1%q6lEPu_I1=1@9?Jy3U2LK-s z>A>I(BJ2}DX!l5S!-3H9d4 z2!pR>Ens;|jPMyGfw9vxKK-Yl)x1g z7WAQoYJ*WCh{)5yX%gY!CAP76uYtRWE%HS>G|DX++*+F?z4D$oiHMI!d0=4j1{f z3yzQqXB!&NKO}mo!Ih$a|49w+x0Da1PEtd1uZsrc<8;`34Tyu(f`WRg;9IZ#)|Rv4 z#UTmDIdu5d-M>-9i&%1f2q}1#I32W`LLhYEhe*O+FCK1t%$ts*}`%^zBl@7U|1P1%nh}UJ_}>_8e6&xdPrOc zqkZp=Xc+i}ptp=vn+uL2`;IZJah1!g+l)ons-O)TRIE|pSzyY%0#z=--X^Rdt`w%D zu#9vx($eZb zn17U@w5c1wP+LKW!?!*ZPYyJ%+?=ITgGE5`-$Hwo4dNZ~qKY|#`hZENI>x*>iQY;f z4ts6KnK^!dBJNl6?x4jm)JsK7snMltNTL-b6X%qIA&NIeNjwXK{7MDTd{jOOgs|OW z%Xqe#>MK(K7fbD{IwB|go+umRd5)^LGw&FAy$CsCL4uKd10rdA z+&9JFGqEVGUUbmc|NA=0KKq4pGFXac?>_P7t^Zdo&vwgwe2Gc#!Iaf#LxisSA5yR2+~`x}yJ#hZi_vo}~^RhZM|^ zM77CN`N?6@5{7W}h4t0bntORreQKYD_YC8bBt_MTjTku%9j`dhwQ)4854crSpA!%u z+Tyi}40y5Ous*0P3H>*Lg%%G%<7H0;y4l_0_duTfC=Q;BiqzmppL6@<8Uw55A} zGVb;(lI~W7d;v$p^7f}S17nb{cVr;D26~8&fb!=;Sb8chRP4(esj!Ws(563H1g%X2 z6r6&s1E50_Hx6l%aDUN5dXz@U>%_GKE!`R7LYT9b15PJbwmV}<;X!fZFr@N>anO}8 z3~8Zs;?*$VS5XDsdaN!&&yM&w2OEbqI{XNwNix8&1fRYEs;f;rU9@(fXyedQSF*RI zTYSu=btRH8A#~i{JdR)4uxmH0qxygq#V5cF3q<&}1D!uW;;lpQX}A8S6FM|ccwyNY zQt-?G2_Wf#KK`V6hQXT+i>+`@$I2-Z3jTL zj0q4NAY3O!^~0djLsE~fPuVagRErZqLNIOzK!z}etk#K8+gQkq&2VXNdJ-%swOTB4%F)!C$6!5;SQP*Dx&jHl&I0 znfP<<5Wr8Mcr4e#Ez!Eqh)e*F*=NKlvw{5S>r-1tlkB(nhanw$$&0(d&6n3|!a%?p z!cL+kqcAO)@Dwo6wjN%HU#lHxlbe#ovtgf$w_I!0pmiFZl$M^MwlYiv?-{q4+<_pA zN(*k|?{i^<-+D}|aVxOUN!KPX2y57oPv$aE^{9KJl6!ZgvZ{l^qK%4A+HUxy4TMd7 z4^R=%f80@@gfV&%Q)}VP>QKD~){}mOtt`|GBQ>bF0ZtC2RdM9#;dq$nGjp;wZ<4S` z7}b6ph8`pU{l9V8d508&+(~*M5*A1%sx8_+!@)+|H<9^3KteZh&jrfd#sQHZdO6ek zfelM={-kK&8wNz%6Ultj`t_pDMK|bRu3BU7+w$cbxnT)Iu7m+Whr?V6LlQ>e4k!F# zX$l;lTZ*qgT^gIPG9e{l`0n2?)bMAPzP^-SI(%QaVmoYBY##V`%p6%$$Q&@jmVIJc zWGi}sLG9t${Ovp)2%ftxvTIPb?2>2hdmqHBN|C3#ZSNaF8_^M~ z@Um=3iR{7*!Vm$)`t#S)KGNVj254`aG{x3~M!b>lXAT-kAq<{b9~-=7Ilk5K0YInH zY@rY=c5}nL^(aJ>i6dyiA56pP=sz^*2$3TBI$}xyite->AheG{K*fQD6 z95+iIe_{|VHF$uE{Usa*(EZ|71byJWI+L1ghK5fePrXW7z9`t;&Ty;s=ZT8~!^?rsio7cVd5<2ZCTZd}@U7A!YlGSGMGU;v(K5t;Hn>_+uTQDr zCx-Y>2A4^=-AT9YxEbRhB(wLN?kED|w$_;=`+;ctDPAu!?x2h2NCk9iAI89yz{Ef_Z%R$s z4NQ?q^BsFKv+yR7U|@hKk!+}1Ujjb^i)!wO4?JY^;9yRN}Z?D&r@meR2n^%{+>$KQ^|QMCwM9YJ(ZI^l~X*G z(>#?Acq$`3l~JC`M?IAbJeAR&%7vcFMV`vVp2`?crQK7x#8VmPseH^+8SklF?x{@h zR3>^VS9mIuJe4awm8(3Jt38!#Je6xbm5Qg5I7;l4AAys0r#uf%x}EYY9Qc|%9iR5d z6XB%UBeQU#_Q*Oo(R*a#2myRovgne$yn7WUvUV>~HsN}d|FlWE>)?b291>NnCFGz( zM%i$Pu>)s6FJ+T>sq;tR zdf}kk=`L%pCH?qhv&vJe2hJ~{lJ;_(aW^e{c$kEDm@vPMK$T%qx<}cI0*Fl5&sHcY zDJj+M#&ji`wKQhH;6nnjxhPCUh$|d=Ax!KIDrr9$Y^Z@HKolY0g2^@waLEr405zUP zs2a#226s9bkW!kF?+fxoKi^71J~`TdFpIB@{3{1AWfg2zbG5u~uox zgo_~w7ihcENWk{v5a}U+$Y^~7X zYsn2aW0wV(v&U=qu1s1-`xwgpxEI93Kx>?ZUecmgMeP=pFdZ#aJUS;bDo0Nf9z?Aa zMmq*QI$-yqAf-`y3&=*y9S^afX(sGqO*@!(OdeXjDTSMTCeLj3=Ff2Ro=LakbV=K> z_Cyacr)lP~tBD>OpG#JHX2Uu7Z5Tpo%8N|p2TbJ$P4TF9t}vV_Db_9+@xL|e1sFAK z-y}7UzglFakoDj-Br?!p)Bj%mEW@u`*KTha4vejLiddUav?)v5YmD z{2WkFxuRVrSp#Y!mkHywV!eXyn3uqBRv4E_VT(+;a+PB1GCSi6ER-}Hl#UANlFQDx zzkz)~8N{P~@9@rsx{IR_;7y!iESs`&Z74^7T4CvOTW`LaKOb_S~ewUg!hP5a?f z>Y2ZpG*$jhGw}sc&r|?+>NkWyd*P}oqG@K?epB^nbAO#vn9!gj3D^fW=$6K~!#^|; z56gj&WkJ0Gh_^NutVXtxBYl4k-c-Kbq*yzkh>(|%9ZT>Tuu@wKG>gPo10RR8GQ^U6 z0!(c&G7VP`bbmAKQ`H4Mf#xU<;5bxeHO*WS0vw$sGl{`X!DG6&?ze`={y#U|{de_v zZWv@FNLSMK)*ag^>suzZ_2H`2q_#g?{n?~Sz}vx+&*tcilT4WW^MuA}Be@ey)MY#- za|c`!(Le!x=4c=Y#&_2RG~Y`J4R)757Kv^$tUtuDCAj7n#?zi>%lfR*&Rgs*DbM$+VYP~Hg_VquL?$1 z$;81jVio4Qq~SY#J@c_iBQL7tssd0vC@)5Yn9?JrIT1u`1h)Ugd?(Dq>1Z{b^J}xS z8=(Im(>(dHrZ~LLA&6fkxB95dg0_*^?<=4a0sEn zA$r*oRRgsH^;AJZ)k38X=_ILZCR7aZ?aVu>IG(ZwXg$+?68ppb66>c*>?y0qXTqHqVqju{sD0;5 zdGylqb0(Yy)}%O6WDB@eqV@OOY6+W338`!+7j?Ptij?Y@;$|HnrLS^CK2ykEH_LP( zE1QcUFiRR+@Ez9R6%Q=1VBLk+Ucg|IP=|sA6)y`F>p61+6OPB;ed=ne7*<&IOubo? z>OE7;Hkh*{;C?Z&zs)CSev~Hm@gg_kXY<(!h@xfdCyAfB;*lP z*o#iw&YzT;aS-+!Y{yV;mO7j3g1e91&doZAR`+$>0mIsh3ap@KQ=ly|MnE3uSw#;g zP;=@2=#0B!0e&z(1q$)v2A~J+IutUi<^}zshX&dwNCRydsmFC}@$`(N1_ICgH*x)g|Rj}(RHilC-+k2=Xuw>1AHS8qS95z@HQK*ew;0Wk6 z0fEI^6C2}TmUY}-TJgw%WcSw<5ty00bl%tG1?NTL#5exBF|sjiHdA(~uBNhp5c}Zu zdmig>q=|SHh{QO)>wx^VxW$z5f%s^h>K?{;1~|6+RIxQs#odkPW};ntAOQBph|1aDJTP9 zNN}-^*ado{-C&G-brrsHB(wxOR7hAI7=yEcYtFmLe(WHQWLpT;mCR7YY!P#lN6 zO@hAj{TTM5IsaWWZPU&(+FHQ*sr1=M>=|;PxOpr6*SNtpMk;3U388kOi}&V z&k8&4XN7h6Q@sv9tU>%vY!EMEO_#AvfXP6tiaZ0s#4*k%2haYxWoM)8t|HUNg~a8{1}G(T|{ zs90Y5PWBh?pu8jeBuBu3j{cn8zD_;n%%MBHuY1v_PIi#f?0r6O9W4=$CgQ*B*wnN~ z6IZ6;>nER0PD@KmRj;eakCg7;eq2R>nnEJdQ&XxK_v-|Qe*SR=W+XpO@IkT5ggCT} zh+QQtM0U)6jX+BXAuJb@iDhjrkQ=|sO!0Yw8bs|Hac8kn;ayO(GN;WnAr`$B0ECFhs6hi`-X}1{rET|KwFp4i>9lZyH6=Z=3$4O&rLLf_EKU|eb28IY&=-XJ zN~XIrN1TY$^A_N3Vg@G&@P`V@B|wIk0)vJ&yQ+yu`FFzDpO&qRG z9EnH9!fP0LsWovTAQiw2a{Q|0gbB0Gbr6NFcr#I(7n?HD#jgsa+buHGgQV8tABi0G zV<>dyJ1N7-UNh^lFkZDBKOTUL!MTlT8O{+hKLv9}TRO!)XWb*kwrSk4$(%=nJ*6!a z+wN}f=6W;<&a)wr{jlfyYo7!3JUF7>DNGLX#1kcL0||OX2^I|4Q&g2E>N0@Lx^lB6 zRj)LrRLXY1Rz)VOG}&2_>Q@iuOh73q?n%Hy2Vvc&Ft%)am=N z;Y)#@NrtQ?>k}+AgoLcMh{=JjwE?i9ajgxEIR;0Z9@XU)9Mra;GY5h8R4IaaOZ2>8%XSk)#=p>exMIbb$V%jz}cfM2B6U` zP=Pv3hc(`_-g@{uD-0I%{_Z5od-{1G?6b6(jOnLUO6N2*3yWr;n5>8QipeH;p_puN zt)=8Cc$FIki-@g8G?l{3Smy}r7tp&mVL%LuYAtCmdYzzyU9X?UZX>8Fuaur~+>=$U zXTj>v9REvJwShfq`eFO0r%i(tPaQQ5+$pG~VIe3J1=p#SJpi)pbDyljdxhyc638GO z8(am8FDBUiP1nrOI=udhsu|7&v`%_T^#d&QbkJr*vr#nwQ$Y^^QiTMtO0{V$V(M6g znZ{U|4NPWEu9Tiu4Mv=n<;%lG^YZ1Lw7o^>gG=DIt^tkFv&1C&4Z!}**EltqWDQY4 zKS}6y@x+sU5kyVEWWqTIR#j^lbz>#MM;6pl70#Z5>!kaXO!TaFpM<0P8UI66>o@KM z)^G~qAp|}x>Woa>=ol`j)xvoh{Dc3C6HKdDyAxn#Yx47@sxZPC$ATf({VleKgW0Ds zN^!<*1@zVPD6SWFvI(aB9LBg%1n+m4vTvpGe(kN>AA*ClIEc1y)#h!4ASVve;UKMj zt1fSqw+{N+QgH}2FjI?$#FIuzV8qYGcKMyK^V5d%blYnyh=MOB81BKxsXJtH0D8}g$-*3lz`a|EXR`zpR*8(=65&aGg?;VP!edZr{H z0R4^B8M`oQ6WYPK6?CxE+zEy%%$T2EMee5sYn2Wb|6G*5E11XST-uP4 zmWp2sEe~&I;LXtXFlc%+-QVH@ghS^*Q-82Sr|G@}L~BBr0DVk}Y6XJ_^g`TVJ!(+` zk%`m|=VWE)ZUzB`VjuVA2n9bL&59fJ;#wwbtsZ(l{?OF4e|#tYI^G}UdSR$z)KBdL z(|LzC3(y77DRQL^_rJ4(=+wl6nD;a!0kRjGStdLL*R$H`rFgPRf9ECJNm!zE%`~X; z?dvNPbd(B{nxeuObZQdr1;fE0&N?tOMqMs?`?N{zZmzeXyKR<&Hl&4@z=Jv^!j;#0v+iWea&FGC5Loqq++}8O4*q;s_Rq8L zWDRBwOOaiw@ZOjm1gnY{u)f>*f$lxR|fE=QF&``GT1c zAiEpG&KEd>H^fdAnEFJsA_p4kn3BW*v0-{Hz>(^tc=V6xSq2W6t5~`uj3Akb|$bI&IEK3pj$Ak@6}wan`BCAs#bx@QwLj@ z`gp~9t^C&@qv-472vynek66`zk5p|2QUzE<71qIGhJl^=9h(RFmL1?8WE{Y> zP{Uqg9lkJ)8g>ueipdyYn`7#Lt5{8GfQ0AK0(jSq8G~++0XO>`3k1jcq22voHeZ<6 zkar8F>c5(?H*4QBBq^WuU5Zzakj_pG`IUT>!DK#dPw6ghSx<$2bx+xI?6RIZOzkL~ zTcPw+XjkL7*$}IffJX_@J)$pGDq(o`AD+fZfXYD{8i46Bm5ScVHh=D*J8sCcdfauk z!WBehO=8DYc_Jo%+zn~|d_uUB?P%z+6+TUj<)G_vkJt)d#Doze&W6G%zEepf&8OAm z?KmZrMdgk#zPu>8n0a)M5@i3 z!oP4|!{w*YR%n~=eB?`a!?GUWJRbZh8(<0Q<5%K7^^m_3E?7_cx&<^1^?OkJ5@c+JPY z>?t^LTTV9ch_C;sd2kulY0R%a^bCA7m|{(Qszt-2bbmtmTT2m)d_^L$`rm*ML* z{DaMB@&?>>J?>MsLTyqiw6!R?*$VDF;-r94%?dii39T~JEws!-DA(Udj5(S@ z;GKHQHTh@w?g8}mF?9dUvpB9-Qs6WHc2lKYvzawPAU?7Ni%$AW)y zD*j|83(u_opEEfy06g=j&R&OD=vpfmIL1 zKn4fMLmC!%H*`N=l~m|)jgUR1TR_eufv)4Dal381I3Mema&~c$POVU=IkyC7VB3sS zg8!S4b(m&uE1m&XEiF1p$TM-W1~nP&OXgSPMe#(DSEg*m)6qMG@q0cz$?!c-CMUZ` z#U{7pOEwu0GPp`;P}}3YGDum69wBA2@4zA0IHaYIk$)@n)f6mN{*nN1onv#)S<{U2 zdhtgT)>VK|0W4rFmklSL{1s|Yl8~fq2Ilgo3KSd)r^=($@(uo@{w}uri0e=Xzkxc) zmOOgJ_qmdL^d%(t8%AFm5lqW4`MUX3e{<-dv`hlpHI*b!bmJ&1Br=XCIt7WE#u7yW ze~Av2A|+uO%!~dj;I6+JR89WLLLa^fZHR2(N%v_f?Fj`M1+(_kU2!P@tXHi^dW{fM z0Jj7`YXv4`V-A`#>U+g{ii;^+$qF+Po1q!=eo)vHR`?Qt`suvh-LL}fgVFhr;ysyz zssFFQsJSWozM=$!8EpnG&iea{v;N-{$1ULksl{1C2zFm_X0IPFj^ zb7j0d>!IcUxjY{`Kh+b>r`9!}&KtsWK?=?h=d=iN$`t%@1fyp6P1N_&$C{|`2mapN zl-OL8H#E*oPq{BSgzJ2@(GAIuKlv+_uWwp`Kg(9EOVyd=b2ieGxQ$3Mh`&$S$Af0U8+i`9Ev5nPUWGmx9dj`-Vco|Xh`-OFK-uWOa47KKUXb7?M$w}`aVU^BGJ+P2qED8=8_m<-^%6jULS$-t^?JHuv1nYv)nk z$oXsTI-L}RM`_HmjC?q>JL2JB3E!(TE)K9oJgiQ;(yXT@KQ-^E`Ak63zqvS^g_l>c43Cw*R6n1m?uhZ*6)w!3-HW2d*RF`d`m=>AL&o zx)nOfH*Gzl8=tWfRPO_a6`00;#mbW~w{nhbhRkIHWL`W620qB#H+_YSPhXerpT0(! z^`W=aTqJafkuUprl%f@;sMhDF;?>N4&d{-jx3!*yX{z29sST~ejLrKesrtSHc#h%? z^5?e51);ZX5es07!sEWA(kh{;#;KLQnw|lOC0HuehMwa6;9MVi%GjGIVe{S-=$s<< zsMO7@)>95Y^o7FDYdt0ZSnz|!F&Caxqvqg;L7HZ?p2{1<85n!1@DDk;y|pPXT&CUO z2e~A94t|$A`~wc{R`_orvjE(Q@~_B0z%`?GsBc=E#4kZDV;q-zqv${V|6`I`3J}NdV!}l>@9U`VyFUdW+Akr4XV~$Ko{0Ls|CAG~*OL_f z=W1#bPR-}!(^22cPe4B3Bst^u!z?@vvRjNfrVHIte{*E5a4zzyu@9OkN&cqliSfv( zzDW0A^ADjTp@YI-e2M5J`Aeum_|VoRtu=z2DEN3(Hfm zBAkO)gzzfu8bOxh+~;hO>xt0Qwutqxn8XPa*9hlj8(u5^b6jgv!QY9n>!7+1{{_27 zc;6QJG!c5u76B_yRCMn}Cie|nyX$d7NV)QRq z_4yH7oP?x$I*h% zKf_7YHXhB@YSq^L(W2|&3x|HW+ zI=VEEON$1M1vkDaiR=nW8R#f!FJDh*?)w=XoDDWj%($$gP_448@Yb@J?k%*)_V_sM z*yLIE9EX3x4v9pjyad~;oN>Q}UE)mD2qsJ|>oLod%WjzE32L~2w#Plk>E?nq*Q1*Y zO5-%Nv%{D4#O1y*2M4RLJHP$OfR9DNtLld829y>km=qubuAzoPV=oJ;Ig#g>zrS<2j%WvhCIzfO7)s zxkPAFVbf`QLXg;db76)!=v1B4dyl8&(SKcc-|fN3Kvxq z)5B}xs~Gfv7lnIO1N4w;vlfE{ZjsJmbT>!#Q|(l{vO%N9R%u3!XL#;|RmPes4X^(I zG=kby#;y@*q`Rvf)hT&KfUc5}*CK1s5fJe-%+niZ`W1D8WgfVHOpL9B+d^Vn@td5= zHPs7~v9Y)Gu*nv~aI|e7M+fP68r{4$RCdcOvIAzv6xFC75CaB$JkDT4JT~z2nxVJQ zI>ko_9Dh+z=i7NE6w;xx2!}gBKd$M-26ok^cy_exN3+T){P}3qnL;+-)JbFes46Qk z#U6kuwyf8T-W`=xU*JKyf}sZm|I`ylxTBK@&z1k~dq3;MiyRv)_5sd=2`=5qVSiBd z%ubfT5DjSqUg4z!$`WQ?aWGA6i8_N@4#p^!Vh?aG_IGUdy&xC+5}PTWj%vLZP{`u_ zbuk=sK+ShwMDbXJ$chd7eCxfV|WfxQ^MUN(`(01qiu0up9%leg zQvFSEg@YBu{hlUtwhwk;=pfGC5Op~fzah&px8o}{rFd!m`q4FGX(>pXo{IUmSvd}E2f}{S zMm9^JYD_^hucjboI1}(Zlk+D7E+oxu-OhQ>x}$%`c|Y@h23p-oav1bGw%(k&s<7K_ zg`OAPU|tQ@QRs948)J~?PWEAqxH7**Z@gmQK)nUBfS#1PmOGE&6bU|0anVJ3in zKZ>sLi?9@FavnrXWo;M-{Zl} z9rTJ?XsCX7&`z!*1O~ffLuyxi%!lMoN&86W(J+gcKePNDFr@g{4KO1xZXaAvMfs0O z8|$4qZJTu(XPG=@ETl;9a*I1&X3gVrIC;v{X>Yy#&YyN_epf*MzOblRjW2=tT@zk= zU5$So$A{Qw#)dAL6*v2_Iq|lobC*4^{K15IzYi;%U-VFMxa(neg!ssgr9sOgmWL;V zBnGUQnH0Km)~ZRXXRn#F*0wHk{UgbfQ>LVHX%o_e9}j%On(^=kOXfpa6SL<#N69>` z!0^T-Q$Cx_c>~g>ZkfJr#+sm&!71C)6~#+=&E8esRIkJPy!U^+zxDpFcdPdW?~C4T zUZ;1v_jld`?@I(xeINj88f*q=-}?cQV^VBz{)AZnEllimhhaXuXLq>!PyDmH2SHQ) z7VaJzgYA&9$qHRW(7nyy08`YjRKGHJgOArgI|4fm1B}>n{V8QgUaK0qd423PJ}|bI z2YP<&D8Dd2FxDwVQ~=!w0OxhFj{|Ve;h4TV{Da@u@PCQv6#A>2+r6Q`cCb~-c5nQz z9n5Zk=IweX2Xx|qJGZ!PFkg<)4%#`Q`*CWQ><`8E3;$xz>}?qPC*}EL#J3)X~7L*7%Ql1v~dboe@S(rC+BzUV=n1D%=>=LJw_glg#6B;~~G^Jre#wjKnh?gMiv*Fkb$hA>3UE z^h7)EytwPStovDaoRb?T$``g34#l(!bc~nZoQ|iLEXN8E$~hQAh9@H)ECDff7(s;| zBOGBxmttT!A^bfC=JFcL-E4~SDP_~Hdeijqi^~5-lJ=Gnzlf^y7 zZFO);^iB@_&)_S}PB4@@fV}?-R}9fG(Y%FcnzyrnHSrE$ai8PRXg}^^xS{px@Q4}x z6(N8b>U>r0Vb}U2zkfAXLcfOhyvt!1x&XPze`McpIZ##1b`A&U&nXW2!3_E$vvVjo ze{wN<18_mG-ZB*j!BtQXMEM-}5I&FqQ$Vc0kA%?_sOUmjuLb2?5TB*TewurmOb=**r+Wekd6FkkBL{c_N!cH!7FqA1G&1F(u+#sH@++2?bD3C5 zAc6Y_SYc9F6HD>yP}mi*PyM|h;bE#RzFrrCP7%-w{ag+ld$}CN`i80WOUs^>+m`u$ zRw$ujzGCg+&VD^l=H#TMHttfa z*EuZNGu?GEy$jIlI2SMj>F3os=$P6(Kd5;czhy|O_L{+5lTVKS6ccatK`2yPw!!yv zcZzkC!$tO2(bHgG`Y-_S_$nKkDIMetHP6o$W&l$v?jW0-EZ)Z8Q;HbH)UFZnhk{e& z=3MkBh6TK-=zv$>h~Xe75C=;};C{iD=gf-}Q>_?JxBupW~{>UJw zq?8SFCo+ z*qub~Nm=Q`Wn=S@4qEq>9zBEnne9C<`g zQ*QT05L=9pS5-vCBVOit6MXm}da7+V`b8U_m$0Sfert>B&xz8>W1vZ#_3CHX)IN{U(kkEa@`OTBS^aqW1^Z{bshMAlUI3(lbjcx`p?mI{)rI|?8Z^yqEu+XgR(W(l?`oo@r^@AH|Y9oXUw@e7?wlQG>=g`~c4#rGfi%^g9CI=#L(U z)nExn`AS4LhnK)cVF#!Bi2G9tv*E;tpqbl&eHwH|)!?6a(!Ebf9mAV-neRx49_Y?f zB5S&N1;1!A53sucpJQIiqY0>t7~iq~v*%s_M#Cvm2=D~l=WouV)5#_{EMm5CkcEng z_Q9g>d7|TcvCp3S9cKBK<&)KAIj1hmO@QuWDqxJPn2cu-(Ylkv(_AMh(?i`a5$L0v zJOj&vzQS7c7kp{XM}_t1t(&|7l6(obmkJwv!0ZXW_A4_Z>{x236_yn>W{PJ3nQtZ*1he0I=IbU&G;@AAocgNcUPP7A}g*fiDoQMlR?-7motz>t&lCc3_(J}=sGnTBF z7`xa;Y>)da;NnFACjJWnz9ex0Czb`E{~AxSk=Q#AI8=ZaGpZm_ZNmyiA@-gp+l~11 zXkM>=-sap!Xy>Z6O*7Ss(p8fLt^)w9|JtIGLV}%f9|3B^Kd7|Qa>`m|!3dJzM*Bb> zTkr!dYK@5`e@mGm_x!YD>^`#B8hm~Aigk2UO(T(&EnW$0a~SPGgvFs1J7ED-Mq1(p zVBU0JP|{MBaMA*w08cyxdPP_db{|*N;#dIsj*A0T=!u+wuYA9d20&Glu}#c108e}c zGtddb1o&t;pT@UOn<(|%NwxSQFu6A)JxWo3kLZPffiD1EIM6oGK7$}!EA*}mMqFVU zk1*VgFu5`eK=87P>oEowTaJNb582)n&&zQ;;Tpo#UIH?C3BxylH+LIidx0pHqHHlK zTMT>g&-U0e^!Yl6-oAp_0_1p2RI6AIyC~g2`#@VkI{}7dUmMH|h2;K45vSf) zM74mmQLTVTPLkLD`(pmfLK<-)nXnaxX&I)l70k2@J!CUp(#<)(f-+ho!)Ucy_&0xh z^#~1{HEVD|o!%Mudy57*`d7AZBa=T0SS`7Ye$((Jq_GBGzLsJS(Hi4Hjy^1rP3!!mbWn z#zR2#j-c(9viU@Gd4&b8KeWKZ2QAwPt8N53z|oqCVV_6U^c}DU<2;`s%Z^*hIm_Nb z|8?|Ux2D}_4Yul{zTZ2Ah&B0sLJxKt(Y~bDL!d^+e}Buf&s@?5=;#dQcmVN%y_V z{Tko#Hs2ZlJfeu*a_!am<6rp04o6(!trq;_H?%f_Nb&tnVgrNNZvz{cPs~}5H!vQv zX<`F&%sdH>$Jqzrc*iVGZD2;swNo46-SzCtkqyisdpWYPfhjThMZsy8>Bkrxx6@P> z-@rV}3Gw*uG~2bJfw{oWPHJGTv06Cl%?um^%~O(ad_ViLp@HdDkBs?O5MwptFPdr& zN^4+7xi_^9Oo#c10jI5F5B|J?X=g9P@eV7)ak}{e9QT+~7B?_&n0^k&!{+Q*oR;FW zeB*uN#k%ywb&D2i4L^T6KRi4O5 zjtFjCpS)<{5`RMwY=}0O)U&}+%7{8PrybQ2$D@d`u{jdPX8t>Q30zi$^nI9Yb58_h z>m1yA+r+PKeV80JEPl=ei|4C-pjQa#uDWm0g80U zoTuKr+)-{K%JqZ<&$_I@5(&> zpZ9xt_nv$1x#ygF?tOPVkC;&~zytJ-$J8l!P^W=+hR!IUqu4hD;z^iHx78>fir5Sd z81%5|IM=GlGu;ZJZk?$_z|Z3xMLp=bUDaq&gR^)~3k&?p!Lh=4j0J-*@Sft>`&m6L zT!RR_#t7pvSaoMR&h)epfJR_6!hVQtQSgxQaHFyFNzaK9R>&T#fgTD*T#1jsKdwMz zgdH|DF=`?w5wQxuQHuoyZ$49oJb45PUSQfAwCF469s?V%>`~|AsA=3d^EBQ9JSMWY zv+-HVxl|#S%4GMRupBX7nb>M?wVycL)6%HVhR&|${$*BAbEARmZ6;ZUq@HGpf#_)_ z48D$-4aP@Oz1a9juJ?3|-q71D!SjI|Q>i!!oGg%nvkM#`H|-ahA-?%c&*pOpb`MsM z70wttW^8yyS?@{bvD-bp0L}Z@}hrQ)VDMuCc8K^+!Uuv#k^IJ0je9^&^dkMVK5-5%?NJG|^3TklaFA zZhtH{$D!U}IRrj>yY^~Mbgcdr7k$gr!EePIL?=!h!d}WD4(|9+}3Oyt&6qnJSKIp8o-b7dmO^pJpw(L-3?GG2)?J&ZEs z;(8eNyjI_Q`kYoF>ztY^h+EUdWtlSx+dmQbZp<@XnP>!Jgb|2^7=I;d4mR;{>O060 z%@oF}d5BmrxvxgH5NMgkpOa|2Ik>sK4gX$f-+W<;FWM~N`J#CtPwgpBH=nDLZl*E= zdYhcp`r$olf1|;7^QAH=4L4NpLZbEcm;Gr(cP zb~~z(W$b1pHlhMpx8flC%_lv3lMGoQ7cja^_OV3x*% z+a2E)IUiu~m_?lLCh&!^E8y@Lw`S z@2rKx*I_%&*qfv6kKp@I}eRYa57lL_5i4%$N;n* z&Pi|O;SXEU{gja5a*HntnJR=PI?5T0`>at&#N;D4pP3>+n<=pX8LxE-o7`kJpLqgL zpoLTBK$75EZ7952ZJ)^(z0DIK+e?FpjQu?#=M;2EfVKvJ(|*uzsVQWOsAlSf%^wYF z86zLNS_Uo%viKrTFk3<_LOpGkNa&u9G#jr?6&%5_p$H7*lK#v)_CNPO-mJ+};bhxpGdBm`7>?M-n~!Oj?vmCjj5yxp$&pL5K&f82 z&`pe{GnSj9I+t4zzt=E^N@9(A9F=$`%D}fIu@mm;d@;n?pLniAFN9#?rOSHGe(r_^ zg~5voj{S$QNcgJog772ZQsHaxd|NnASOL#>gmZ;|f@hAfL}-HN9N|mC8hDz8dBSpd zW(l>zYIuI`^|n|1u()9sufKSG==G`B-$d13|0((je%s(aC%PtDM$^1W&%;coSyL5!P@ z5&u}e`(sb{wkUJI6QRH6Xq!_`@4SHFBf~ep()5ntP5kdb-YCBKP}Rl##~>O;OeD7X z<>A}TdLP8$eoNqynX5LP#Nq$CH+13H_^<2f6^GtqkKfotZo>4xS$(Xncc|_=Op}97 zzB<2s%EFSjJ%Eu3vrmWjwVpf$?k4EO`Jv11?B4ad6yS&7DJZ1glVq_y zR)6dXDNC0ft6lN^q=Vj&^5G+OOTXx!S7k5c;3DM$;@H8@G@n0(5|6eW`eo*q_gZ1t zi#|1nb$ppU<6{p9Yg06N$Lx1EU^kZyGrtYFel7Jg54t>wX=1)0Yso#V>>EEQmT#D& zxr0;ULzXWfH)y_jF$WuM^z-O`!qeZ!G2+`R^4!GDx5N72tD9f{j{`C=mt-A8U9D+Uo??VPIPEggQaB?5mPbn?}v+4JGb8I;I2Ed-nvfBc8~-4eIfU{_VtYe6o7!y9@Dz7b)V&e zsWZ5(6KIU!LuYu;F)Z(#mnj`$*rBEKzra7ckEc}YWXEYzD z0<@WP&s-&^dpH>UBSf~|W-eTw7=JXBfC0IVZ~q46*v_K`m^<7FQ~jp9BJ-5@kz*R< zS2gYd3YXTmZ1+W$3#|_3auMJIf!FztQrmQ-OEAa1k9wN8dM?h(eCWE1-O~hT!T@Ut ze^CFP`oPt{JCt;iBg_`{zy#eq>?AQ9Sbi~f1X=F4UT2?D_Jlo(pCU$m)vO0ro0zo- zMv}DS&Q@P~%t`Rzwa{t_h1bH*&Bm)!1$%L9DEi8IDVPuA&|~(ZKI)9AlLz{Jm+ua3 z;@i5MgIKETcClo2V{9A1{hHs~#KVKbAAIbu_&}J@ht&MaVfQw1cm|)Ehuj)H_g2!7#+f&GNUzDwc?|A)8zEpMz$P$SU)p8qV|JScpeDL2R- z;A8xiONYUq5!rKndYX9n<0tkRK3Ho>)?LWxQ0y`yhrjCh?s0@;i0b&--rX|@hX~^E z@PLPau%rv|7gz*oLU3Q@v?~n)Wv+mlO;BlI2&1W9%PDXwt<4iyF;T9AP4zN$lGval zl(70*Z3{#&RbY}EstCtTCS)OKJPN8k@^8;Bup-c@6@y{%QS>+Z&jsw^2|+jel&4lT zIo<@Dy#z;^y1rP+1>>ivF2~xirZvRc-Z$@a4#0{@dtxf88lRU<8Hj(ekn+@OcJBph z2sN8cE#gwI@r1WmaqJmf(@mD?3^JWVrc20P%gM{0qdfI7W&4(D{gyiLE!F<5s%PyT z7`3l3^^4a8z}b0@=@5&$NwrajDVQ;t?nqW%)92{Mn)-QbR3E@uZJ1@TEPE{-A6QOV zezhF2I4qYeeR#Xjbca~!qaOq3-jBDnwVh~dRU5h-{%eo+?wbm8Gt&_g{B+K>U2Hqs zcA=x2I*LEU+q=&>6(_MiDOfdvBbUu$%NBBFYj_oswo8C}2IE%X^d#z@{WVUQJa85} za3MDkFalIPy{CIm^tSaL@4fIqc1m_sc2U+3XrDnNFEDl+HTF&HJWIdwem18mNi*UR zcnmr~CN3;(h^QgL<9c3i2W6uU<38RVjfQ4Cu^Ixh2-jKSa0@sGOhZg!BjA zan)Z+&ofU6K(-lZE-cSLF9PfHb8QK5PelJ>8QZR46KgxJ8`1C~iqGX4MDb}{13!Kt z+rW+&RfvSmLU827C!wH{PtRMhxX_-!qT)VADrfwuiY2hR&yBygGP$=WJLe-fm;PYu zhu9UF+k1n$ui3g0hk3m>IQL{Xw{F4_0wOlkar7?b8-NyoU+B>Vffp79+CF&qo%bqa zSsd|)NT%3`WV}sC=KC?KxNXe}16Uxy0s+PmLz)88nknB8(F4c9IxZ|k21D!WKLF|MdUIO}oeD7l%@_V`m961J!ZvOo7l!FiI&Ox3OZA0*YiVt3 z3}Lk%cysTd)q;ZCuGIqLA)~Sf&d>}8e_&N@u^_y9qdASJ)eCEL`Q|n7@~TbanqfbR zYlXyml=LIp_{eBD5604NJj!yM04N5C06^5U8Zm4S=79}_lBT!aXgw}CzPi`30|pod zKK_a>IF`VW#2}>>dRWrGj(!5I1dAASXUCT=9ByUJ zBV^PCt@Oao9z!gxCM#<|mqs?Jv6K*xhOuYp>C7Tw$~TJ9^4+ebNR zJ!+hclHBV*4p)t??T31|!QBe?fzWT)_EYTx4f2I2oPVxe$T!dOFz0g2r7YnQ;UP=6 z@w%~AFHrW>#u%?wGv2IiwnQgi@0|#12*VFXSnE9G_z|@l-YLfIquG3mZxz zmCK?Qa;P*9%PfAYo$id!zW96>*8tVL!?H$TykV@rS1q_9Xxd>vjVucV#!jRCHnJZ> zb^*)rDWfySs(!^*RZ8IQ;k8ROPgzf@&RbxofaR)%o@Ty2n>M9qt#C5jQ9aFE{iL2| zp+07SG2@kLQ!@c?Jg_Na8(JL-fOJfFO^_p}^-9Gl2P|;txUE-oKM&6HKa+>r=i%fq zUXX2<1-KO$uNVbac34e!d5m4s@(r?1Io!h8Lt^(40x%wRA8US9)x$!=E4IvdAf7KT@0@!jbJrG zck%~N0oA^H9SgAEo9rqv0S}K9 zS@82}UgfzM__Tt<7c(lxL+;zI2GJ+nr%%NH=cGP(Fx#_izhzrw>UEkPI8FQTs|N(Y zU&XM$&$3T+QcqR4BP7VamX!~u1#w}x(-`13ndVkWa~oW(8qDn)mhiS=IK!>T)a5kY zcfxxDY(`~W#k1mnYikvr)%VbB??y(|ajUBlw?E@wXcac=r`As$%>TL@zvZ6;OS&}M z25%@-2ru-Ts&lI25hSu7MRr|3{t6~FY`Wi}Zc7-uQ3GW4j^ zjur;-W>1>HXgK5Opr7X*$DZrG4_q7Qz1KCaJG;JleLEh3y2GL0n(o3x%iT9azpU&@ zg!Oj1M;;a7oI1Eiu2}K6gX1en1ewGK1Sc(PJOaL-L6M=g zJ8w%m5#l}W0F}-=VYAE@2o6G@)XqsGR)`Z}_$5q)(U&)<&$`+Zv4~y z3s#`nul}?1E5!?TY2G%Fid9U$c;lh!!AwG?#8?{mzzmTg_tQ5x2V(W&kSNek@-SX~>cG3gU&1H{W){PZSNGs}5^Oo)IBC4vkK?Rb$O0aoCHJ>@!G18#$Kc^; z5{~ve&I6j`G#+n?7(P5;-^_8>3Y{Un*x?la6}4T1Bd}O(7P1bkRiyFKX@jtZBWvsV z3bM6TCxrnH>~sY>Jn^pB&DQfe3DpnlMYdB=r8Uq=)PN183BEFN3>WkF%s?&aumB8J zJ{^X0cu<$ihW%%L5`F&VY+Ii>oiIJ_*Kr;?CS}(f>Uul>)jpSVvw{O2)buH&sk$bEm~}yeA|(~?%?_}6g^-HrSb&E4&&rDLpm>iE_48df)~tR+q?FV z@fyo`oi+J^VT|DR%0uuXs%dgg1$3gO**P`-kio~*dcQF6zc6sWFtG4y0e@Z7`ZLx& zYmn_YKJ~O`1!jrnY|O2~$Zy|SZ2Ods&dG0pB>AmEu;F}LzSBnDDxBA0r!E%e=h&V) zFc`2G%%vXN%5KrfG?7P+!g+IW7M%N(qcGnV=(JsP&{=yIGgYTR`GZ;sytZ6z6KuWE zmT=3udxocNk<*Ifu&k9PfL7?*x*OC;iZ8hv30R6>+cx0xIru!?C_3r+=r|l{O9pNZ|fwX7CO~N+6 z-xlIvI0sAItq|B6`{%ChrP1!*bl2;zH=XIYM*n-R|9;WUHMrsLDL}T_4ywO!?w(>~ zOLb6-h?aENIB4i0Z2eDHa=}DWb1>WOPw66Fhr$*t&asuC1u(uir=LW%uI7Gk>^%n# za2ai#6_4k(odZhvl?4N%COj~LA{vUBn#mYoHUH-SgiB(8%eh#SU){`aV0+rK87};8 z7TUZRVR!#gVEciA-nYA{U$GB9>xa*uu<5gx-;Z3!`(flRX-GXA&Is0zq=7#IuzuvO zMM z5@~#?y&gOSX8^iK{o)Oe>r|nQ%DhSC-=Zq-QC0U%RgVb0yr!xLoQgQ>3wvs+`sk3l zk1D(K34L0zj1A0mJ1hG?F{`he3vK4in`X$azGzn8F;~Lw%KdePJ?qqc>kFT}Re2pw znpN>I&s~3`Dz8#i9r#2UyoxFX_&+!?Ai!jxi2mZSF?1;R?Zb3%%TTW6@+dK@)rOby z7}(ZQF6P4>wq)}951z1%R1^3EoRDD27yl4T@*pQ;Z?aq}!@>~YuS%xGHod8*;Yv@Ec0;}27&Dth*Gs^sX559()#)g{< zHxH0_3=(bM3b!n76>va|K1zXPRM*yiDLAXD#i6xtjNn?-5_pb;r|+n0u&O!s9z>}FG*qVF91jlCn40)=uw~Ho1t^Rt5nROi zJtU`E;mizb-~t)HXX*;z>}M2aF681WGZ!LSaa0$rDqN|dwP~z%jb_-?E<{XS?yFRM zW3E&TXpp0Zox}Bo?EjZ_TywY26Zkc}2dAOkT63w3!0H-7RgsihLF?)qR?Rb+g0Mu~ zXA-fuvSo}!zO+PsZi#qQA=@nx2@;VnO2mV?%s0xbW;L>09wb@+&w901{5n9 z=(pumz9hc6ivO-zEjQ;&!dg?P`?xpH7rUTRbG{hF^Gz7?T(4-JGI0p4DExkacY>vL z(CdlDury;h1$flOnUpwTNT+v3rwDT&TI&&7%j)R<%`4=ELTOgOi9zIoO3dJD@B%B+ zL9Eny(j$Tmeg&V3`7nAJ&B5U-U1RgMWGWS50U(`4ado#-ow*32+Y%qBBg#`1psLgt3z} z*)%5e&1{lEVQ?5E2Fr~`6Qp%wDHFNXq9414^)6OPAFY&lwb-B@kgtyse;?MlV?1t; zF0CG6JIZ8c*4UXk?A_W?RwjFz%{?Yld099 z2plMUhC;Ye0KC0l3Me>$WQ@b=Z&BDX7Yf&f;(FgI&PpwO{4F)R6M^%`5mlQ#IXNX| zy_I?h8~Td#Qi^Y$8sDO4Wl)NXI5HIU#8DlDXonQW$8ndX>#P*l97J`gj;jvFx9daQ zgKU_*4W$$|sd)mWcqHBaNJV{nU>)(* z4+o!5UrKRH3J|vPDv&yfaqdVht>&R1fPsw_bPuxAT@O9YDGV`#LaD+LX3TXVX~sG$ zRG2|mRAG==aTy)~W{{jJ^fQC#RH3gKGz8;CGZYR3Ni&oOgF!PC0|P}fkjFC;P!AZi z892t15?~omOMqv$rXxHNsCUsJ5^Z^c*%g5M*b$YoaoZE=VH$!rei6ius4$xrH4nnr z3g&){=OTM1%6>vDRpXPc9oyq%pDaF%TgH|+Swd39Xuz)Y74+y8mV7xljSPh<_$dj| z+MfWHpwfAQRy*#h8XXzg)W!OVGU`-VE9|rVgxFz+I^}zuEKXlTFN<>z7xc92GpcL8 zSq^Onb_ie~2Rql$hnQinO)aWT*$+-t_vqGsQjfLlO5(^hUL|`HG)DBDpKgHOQ6HoZSfXw`@akz1a z-91C47z9tZlSHSYR) z-r|0+RmU+?3(;}t6Xst%Nhl&eJ|&h;WV zMc?VeOk_*Bp_6%~T>Zn2uB$~MPp%g&Dg+|+HjW0WQ?qHOc$>KXyvLwOEB{&KFmB>> zZvs=yTsF8hGTuG)BphR`7kJ@e#uypQ&s^{)?nx$fYu5n|RLGrO2jL;O1DzAxygM#0 z!d)%yL{;N0Y?gdH|Db<)X1;5BM^_z;KRh-)_TDDm2a~J=fDViD@Wv<zg%w6lhd+t@=_32k_F-NWn@}%ZZh(aWR#X_Un(jk zml?{I>PyPY$fZT4rHCiVs?_S1m6oqWe0PTB+U4cC)yPwlV^~tLR9CVBpiGLcsO%*z z5=hbvD@se27U{KQv36NWSqY|xgp#z9%9099ddX_?&stqM@{;7PUZEwImsBh-(l31( ziQPq1=yfG!FOd~1ik51TM3TcqmzC?58%m2veR(;#w0!xBQtc`vlVp~Y+37iXv(u4W z!UP5+Wfb5iNz+!AEY*_wlI2(E&^;QD>yjN+ZkN8d6Cz%Jf=Y8EBCyIYyFFR7@@_ zfm~%p%e7>=jw~}QUjl{1O4Ky8Tn|zi%8F6kGt}kf#ac9hK`1KKX^V#s%=(J1Ab;V?z6&qO#RAumYvI*)o(B zRTh<$V)dbPNox7><%TkBA7Bd+OAO1FX?4$(2#W$*9ascyD8<^c643NChDEF`S{yW; z21G2^7MB#c1kR8o7grXQE!6@`+9JI{_k6K4B-vWJ4vLoQ$}1|!V#r^CW=b?g`j^Ku zs#>~K3keLhS#-jn`f*C~%2t3C>S-HbkdQH3TU<^q)0HpBb)wTFmN8|uURwbmt=0?i zjM+tH#pTN*7=@7)T3~KWgi1LfZXy^li31bHBEE5Y2~;Jh?G^264A*Ia{W2V?SY4sl zE=PosEGZ+ArxDi&5*SNM%CsaB8o^QwzzulKkVQbDxLAiJKwidiDWIoU#=+V7oIx!K z8jVh8SfNKA8`7}=m}q)II#a{E4LP}48pPi)&;*N?zT#?u=zVBpbfGRuFgIvpHq#O+ z$h52+QW+T?g$=wEY*U9=8<`S{4RrB3Lsgii8urzdC5BIGtDj>KY=8rP3b^?s zAtXxWpiTU2fO(*8{At6zVJ^bO?7ONZeBKe2lV+QsLnv$JMTCTC}*rIQ7~Ue>Ic z8M)m)=p>&*OPiYuZx0X|Bm+7(`7|5d1nTBdSTs?L~|KDj#_6%sG- zL5@isOGZzcq$0_bdBA#+UQcRtCGgHI(iQX2dV*0P4{an!`VYp*1PPjvB$MbH!liXu zZ34)SPHk~0e8D7g!t%ErYCp92;4w*osP9f(`PtSyE z%}j@KNzVWj;;GKa&dDXCiwoSp6}I0&Wu+tj>FCS8b@crwOCYqopYvSm|GZ@&j_ zAAfeiY4vBOr*%$T57x551!XD-z}8TkohDaM8gkBer89C%QpfV1sGauwjdzNE( z7}`dclEdT$r6%V>b!WJmZC-XZR2rFXt;VWeEmHI`|zeJN(ri|M2tWKAMHYH@MYw?d?jDZ&1bR3fWIPvIDGUAQn7x&oZl%uIxRJ= zZ}z{Em6^cW6wdJwjP*#-o%^2t0)%FQ}(zxRr3L;ErK|bD<}# z+`odgfV4aT>o;oI<$2h%-}A4YuLzb4UKdCz5Sq`%S2)OZlU+yqp+*5i2!(1c`&U!&VA7mBBP!44cRgv#4HJh|tu>AkE=*)^+XE*W)!1Zv(8qIJer; z9MYdqXYlw277BR@-y4>9eP(Hf(>LEWC|TlQSiVP3RL23aQwENO*7c2WYSaY#+#?Qq5wv%VXlN9#{f zHy%^_BAw%ZNZQRtKl!3{ht{9n6~u!1z7ss)H84!nx~42874DH_4o8g&Q3)zTYte^j zJNgFw1Dt+4Q9oM1`U|U`b%=G0b%7;d2eQYq^Vv(;mF#Nv8|>}uAK81@d)b|A8D}bI z8YiEl<I4zt`j*}zi{(-CIuI5&8-{pS9{f7H9_Z0Usw~PCPEAj~T7~_%W zG2i25k82(`J^DPJdJN%>;6?DVc)7fJyq9>Tyg%{Q@V4;&#XH8c@mTyh{I&e|_}ln< z_}zSOVjQuM_zSU<*he^sr$n%4wC7S!i|2cuTRdAlTRks$as^(3070@~hG4FsO0ZV& zzF;>vp0o-21T3Lg7%Q9t{@`Ze7U3>ooA9F0TjVF2Ao?S?{=6&NCps#+Eh4?fdQJCw z)$0wf?Ovz6E_wBPMT;kk=ZV*eKM?;Qz9GIReku;}j_^+Mp5a~Xz03Qwx81wP+fyQy z43~sUVkMI$(T|}Y(?=kcNrR-J(r9VCbcys8sa{$oHA~-`N z(c4+F`d zl%SFzDriH{XF*>D{VS+B=y=ezpgTdshG~YGhW!mZ+kYO`HtfN$N5cZZQ$9{HU6HF; zq*$U@q1d8mS6omy6g`Tl;Dq4h;GE#a!NtKlf`1D3CgtP^aywa1{!E@CJIFiaW0Esm zKD>7L`r%uLJBHsI?m2S$NX^K)k-JBp8hLHxosoed6GAj0^FvBPDnd*lZ-s0M`7Gq` zA-h7Zh4hCIqehGhAC)jlJt}|HA4V-7wQ`hc)Z);RP*dnzp&y5S9{SJFrqH9I?V(pg z?}rAD9yeM!dco+;qqmIyeDn{akB+`J`p)Ry(N9JT$3%~rJLbzVbz}C7IW*>%F=xlv z#yl9K9y@dFvau`1R*rpj>^oz>8hdK&ow3BY5#tiZ<&Il1&NA+^ac$$SkMjug4hs#7 z3M&b#3fmOc680o)Z1~LZ;_%JkJHu~;qX^#!GGbgrcErMnWf7Yq_D8THeItV+r$pvN zE{}XQvNrOa$Q_aYh-`>#i98?ai1ZjgZ2ai)h2wSOUmb58zkdAY@t=)v7=K`V+xWBN z?~d;uA0CwwH7zPHYDv^9Q7fa~i25jMOVl?}4N)yoZBgfV}s7-K9kpTv9~^J7eN%(0k`7)MNR zjDPHiSXHb#wjj1J_T^Yz?5fz;W7oxg8vAAJx3S;HHpL!}Jso>B_F*g$7Z^7xP8l~b zE+uYOTz1^TxMgvx<6e(@D{ga~*97SVa>C>ZB@;GHXq>Qb!ifpzCfuBGe?sqsCldq{ zw@o}U@%Y3^lcr6|o3w0F!=#@lwN1J($uX&K5@+(p$-5?>o7_8D9v>M$J$_02n)nan zzl`4%|8xAs_}lUK<55Cz!nlMz30D%>iHgMd#N5Q?iEk!;npl_Elz2R`Gx2_6Z=%PP znkj#qQa2@a>awY|Q~x&AI`zWT-l;xGVMz%|vy%#w%9E;+OiAw~)g|ptnvq(4b`C+m&B`hT^Wl>6L%AZoIQ`V(?lyWTPWJ*U0D^-;GTI#2%^{H*CH&Z!jL20pR znQ1SltxQ{!W=Z=fZChGP+Rtex)AZ^KS(mIgtPiZ>z1OoH*-<%}Ip=a@x#M#aa_8jQ z@~+RlJ@@h4oPs3>@4_no@~C~{9*IQH>5XwSLC;(ddc-AvzPv`bY;oKlJq~y zb+dKHD&q7DR`#vj^Xkc0r!_8Ud}!fNVbp=fe#&p3asR|a|9SYG))TFd8av;;^nTBW zhnmWp8=H?dPujBWn{&+ztwq*StIk?uJ@Df?>xEss-Q#!H-)g;Ozs0((xSe{t>yF>u zvG+Z@Ro(Nu$-a>fqaG$cEO>a};ZT(CC6#?CL-Hg!SFV=NkY~yXxkxUN%jJIZAUP=y zk&lsw%cJBm@`>^U`F}TW{~u6G0|XQR0ssgA0FbU4jP97W>AQ}Jw6951JP(e&Z zL`hUHP(e&ZL`hUGL{CG#SzB-0$`O7KkpD19ADRTJntKo2qJS>6trJO9NI93jt;m(M zFv-gqIb<8(u19P55#GQu2&S+OA-Y*YZTP|g z!GEt2_}86)g)VA<^@j_U7+vbEMI!k@ShYcJ3tg46ksZ08iAAnU3#r^H)FQJJ82MYJ zj7$e0O6G7YPa7>vN{3MKqF}NPqaQ7?n&~k39sq`CjTri|fR)iZBXW0qay^RTU>y%9@#Dw; zT*8c?6&Q$1UD(o%T?sr?-5VZ;$i5|I8!7v~Z_yZI-}g0=ZOBftuOW$$lqF?JWM4~! zgk&jMMnytV*_)94f2T27zwi5>-|znJH9XIG&-=dTx#zrN=C<>`NRzn3TO7nTSy%Zk z=F15y8PmcEoQviqV2I-@g7IUPQQ|1hSg?)6-4RItZAt~Bah4d6S8tcu_|P>QQ?k#m zl}&(073BzYbD6-d8i<(TRYfZ4_vIBUUbmv^W|dXWYgL?Csurvil_J0~qC4@{?3DqF z^igp$@YA!ijcl3Pews?ucu(}s_=Uc;J%K#>qtySdG$V3UTz7#tR<F zFWF|X=L~J_KuEu~YP(#=3$Aezzn2c7Bxm$*R`I_Q&F!?YUioOA=jd;}!f_{yARA&l zK$bp&=f?i(MvgKKyEeRFR^RkmC+EeMd8(CqTs>+AsZXM*89n_E;=xopjf(P|vo^ z_6{kM8#&_&LeoxUluu7kvis{y+kCKQ$x2C$(;5B|F7krQLWE`k{3X!`ejavOpOZiU zsf0M8KM4uYIDq*>60-FS;?IYH>KH6|<;&GH_p; zvnJQxvAUt82H*5fjy{hd9muIqoae`$MZ9P?2%Axt@HPMTuTKc4W2I?K zoVqy%L}n*?3N4FZA6;7V)ADl!Q&9@Ysv6;B)l^h^BcHd}DpS9$33sL{*Y|g%oS{TS zz^5Zqinb)9ky2`F%3{e?(QN%~VO?Pfh~&~DPj-)}FQaN>O72+_bt@%LYe`mF%L{%7 zC(fAqQw?j)Wp>tZ>Q;X-tIzK1m{odWVswcNHzh-c&gAElnaO1+lDB?xg7%9{dO)Ng z>bXR?nSb+-VZJ1nGq1fo)QUbCcsPA6oXPfVn6XGYs}pZ4dH3Bdx+mm_pyRdSo~*+K zIX1(D@j3VNIWL!qan?Z^n|`&Jm_|24v$(~DQ2s<~-?i>lr}bBanG(FAzfZjnh zFZp_mo(8(Zojh|NiidvWUoOs#Gq^03DarqFWqEeI%}D+2n*pl6B_6dj=-1b%1eRHb z=~qVwA6YzpuwIn)nyplp*N;9Zuhh;6IR)`kb^bbLxLN4b+&a_GIMb{1Yb7{GCig~N zwiMBr)do$M;%&pUOzyd=OSTvIe=tRjFvCr1wE2g_=-z~X?Ojc*O#i)z-^jaJ4}CZN zMOq~d(wZh_CS~DjXAeA|b2W*IT=Yh@SH^S~dDIYex^I;HPd`+1c6o$j&zfM414_(UO7Z#VDecM174Q0JXz_|y>Ibu?&!G}f=E;gLqFUrgZH zr@n73U6yEAn{Hq2IkpDOU;I?_+kIh+EeO7v3}e39Dd(CKVtOH-@=VN}3sKimTBJ%c z(&8pv%M`t5+l$ojx66VeNOMO#Zxz>bY zX|ucaBxCJ6bbf*L;~bCNQu&bMGQT$2m6A?ZV%5%#b7b^vtd>Z>(WXvoZuk8SVjSD| zBeEO1nH3*m3cIC0y!#NxJ_irODXF^oGV%T~d_@|0ZfNLyR;|D{_%j9^h-I=OCX{FxG8 z!J3Zj>A8`hE2!DtsMRz5L;2R?A&Wj#JO$ z7fP*^%Lo(XpHSHK(ix2vxU~qiuLTd3HJzCG^lZz1Vq6B{9qoT>KH(`g7htwz*tp$amFiveZkMDQ;+kAb3{jL)*vr zBJ@XX7%W!5=q9R9&J5ppMo({9Co*1@p(O2evEaj1v&v(ne1*0B#Ne1VTZWYJ!7ef~ zvPSBNg^uhIhL#4owW<21n`80(TgC{uj;R9tq+qSc)mag5sZz7BhFT|ewbz8d?Tkn0kg@iNVM+2SpOMu|Y3(n+h3mqYVnER~>^gjFd6 zWJKf!SlGLj=LK6H!yqVw^vZlt5M2j^BVw&c{G!+Z`_~1x5E@i7lte~SQdDxTrrY#K z;a7q(!6S8qJZ)s&H{8#jyeBtS8OY}*B_nX9#^2p0 z_uk@q#$?4(iw>vY95}dX^Q^0SIm7ZbId%#A#%t1G=B%Svdh*h>-r@&t2{GZH5Mv;D zWMy$7bWN!2m)&}J^Hc*Z6rnc2y?O1}eOW*AtSTyLy|)q_9u%zIX%7kA83LG|2s^M% z1~WaOlz-% zeqvNxsh{{1L^i!7{ms;Lu9mD8SJXnijQbAP=gRod90?7m&ngOmWYHWzQpcrjY&^`) z{pyAqZ3Z55B&=0H)nD!E797Y-j&Jv=tEULU;B(R3X?|`d)Ylj(+8>Ro55V7={H${y z#^@C>1tlQ9Xk+w1_k5lz?KP|FS9BVS>!a@K*_+F!v>jtIXsniL=%eblfHy$(DUrz% zPih;PktKQDo}Zc9exNJ`GYx9P;yh~;y&DVOHL5yklI9O|3Y;ExgvNFXRF~hA8=T|N zEq{Jhr<0_rC$-GL`KzE_(Kp2V5ek!Qp;ehivX;y4yeKdg{iAG^-#T!V)Gd1)m_oXo zT>L}hus~-^av2I)k#nrxTTMJ@;V;?du?pa}nEXuY!V!BG* zU72ePWr?nnh|MqUW#2@{Qp#iAoCp%?ftzrb&2A*QN(@}z!ui1G3wH>a2;h}{QatqW z>ater8vD!!HMPN6F3XxRlyEZgqn~BpTHYr)XXk6dL*l#vcN(uok>^eh$))?VEvG6N zJv`O2TC%k1&AYttGX?2tF)~=^u4eJ9EMIo@*YF5&?eC?zmkoQ>3>TLTX$Nd^Lx5wq znrUbm=)qMqlmInbbKSDsl-mkk+Undou_fFmJShB1cwTtj{x`q2rOsCNCOH@!4u;{v zaA5c_QWzsF5VjHO2bpPYY;7coAlcg53I>HP5=_&7p`Q*VvO0C{=@tp3ksvaRl#8J6 zBn=(jg8%_wkG*FHo@XOC=8pr|1O|a}9dCd3KJw9)82fR)y5h2gq_pUn{G7igPG!*7q#Am4^8xwwAEVekxA6 zq8jz@FMS#rk&~5GAFU^6VTf--t*o!C_&zm%h^QTzL&>D*R-We|^;DasV-%C|i#$g+ zpCCJ`SgS7GOG80cT^fECPonXtwP@=xwkJ*Cd-DZ9SC6IM73;n6M1gq$%p!0l>w!dT z+>ns?Iud+)qI3PO8p<)QtLCZr5mrH_Y#}jLk?w-6PvE6+{gYiq9(g^Si!tY6#xF{L zKlz1lAAk2XHzVaC&nwAlv&+&;Yec>hZc>!MqZX%<5o4Ff7e23iS92;K+18FxAIpc!K33H5GD@UNz{ie%f3ZlQH?fq|#((c>%1Rlx zhK}?UZ^w-vNdfwFUL;cffs3`Zs!I-w&vg2OsjV#B+1KUGUx~3~3;+Cfqd|ibejec@ zSG+N6*>y5_U$C?{AMu>s4i@FEU}@{BXu#2t>Q5Yw2^XMHB)5j^7alvxf~QkxOi9Vz z6bX^ty68M0+kAdHfF$6!a3^`xh(n!2>V!vE^70y^CVw}oZfHg0$*_w%Lmnb^a%Fts zQGu#ze$|r2n@QB7Ul(dUs6j6CO^s{_#i?kPP!bQ0`w>KV%G&oIMAAxqyAVRjcIQIq zF)@MCaD0NcIYXm$6b|$p9Tohgpo;wMgh?8FTNMKqJl!lBQ$1uQuZ7ZxFi9+H?@O5q zo5jV@tTO#lHg0@{`7!fZ1@R)u0Xmd*@%5*zZBn@uwk9sc zUWQYJ6@-!<<(FLE8|L^t%gEwLeaJ{g&@1BnaY=@sFie0X>2y1)u6U|=s?~kH+cE?% z1#;bNu=yB=8!4B={bo{z&$J{0O<~fdO*qGAo5Bg^M=5cCgO#p?QJlIGNk^qTiZAr) zf$@}f6L;VI5z;ysF=P5?u;1?p97Ty{%R8T$JLj2i&qz1m2UUlly)?J%56vhjs4XU* zCuuI_Q7fISEpB|X90>iqa3wa2BW_$oqk@M!CaZu8dJ%2pJd`5MW*f;ea5(l{;`i^)&e8q54=0u|-OV zPSd{X9P?Ov`#XJBo z29zIbAyAA3x)ip-g0$pS_rvI)7+3oN4tWMxxYr@7ZXl2@9I61Q5m36_kDIDtqeupD znN%PU(CeRu8QHWKI%Y666-^~Rb-llyME`})zPuvE;D89A^QyoX1j6K%JXB8wCcY=V z_Ct5PiH7$7g~I+7wYS5yzbI{}9t^7fuh5-AqB~^s!`iANFCzLEh)py8dB?zSEPzLa zK_I|E+YJJowf+LpTOagr`QXOz{oeIYiVara2Z3lcK_IkXVHyND*{5SW)`#oqiya1D zF*se~45SYT2oL(sf@u)oG}wU!>uPCON*GJy}Ge*Js`kv zs1p1zd?&xKy~{S9V!LxpB38Zqi#O5Jhie>$R$-TV?*pJ70>_DMG$yZfda>y3^w5B+ z!FknHeUJv3VfXn;v?%y)1WHfYPIKPLl$jxhjn*rvdY!xOpRl0OuHDf{EN zds6P@u$?%R%chV0JmZ%Jci(e>_LJ9caFeCLFgO~2ow!apm#Hv1_4eA(1Y+p{IL6eg;gs| z|2D840`$$*nD0REyQc`&cuXLo759Vx_PvvpJ@TNl;{$|sTC$2Z+Jb3`PfS7G3n=m%mcOAlTh|*S+DVH|@de83i=O>{xdb>{P<{uOfDro3IR+K!|eeV%SxE+RyM<=w}@z;74?2 z2s;RjAG>xlptoB3`f#9pwV!}CxK04OsKc6oAt2}4WrB*PAsndZAGWaDy(-%x;zbg#7sYhOf(rN1Az>w_NSAe2zY0!iuu=< z!_sO0f5`wb0byb(F>#RKKhkOM5Deyb2zI@%vOko&vk6Opv4C}Phu~k5X@8j!Jp@b~ zYIhOrE;{ZvVSnvwhrxb%$ArI?u>J7;<(wUO@9!P>c5z2r4gXL1LII=z8U*g|_^V)$ z2uK0p>E(g2_V%*1fmr)Oyc}#HdI)DP+e>_!wq6{b&YTb*SC30JygmpUTZoIT7x0tQ F{{R{PXgUA@ -- 2.39.2

S(plJ{J)d#;U-*~`GV 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