1 ; STARS.S (NASM version of STARS.ASM) 2 ;==============================================================================; 3 ; ; 4 ; TITLE: Star field ; 5 ;WRITTEN BY: DRAEDEN ; 6 ; DATE: 03/15/93 ; 7 ; ; 8 ; NOTES: Need 386 to execute. ; 9 ; ; 10 ;ASSOCIATED FILES: ; 11 ; ; 12 ; STARGEN.BAS => Basic program that generates a set of 'randomized' ; 13 ; numbers. Creates STARRND.DW ; 14 ; ; 15 ; STARS.TXT => The text file that explains starfields... ; 16 ; ; 17 ; STARRND.DW => File that contains a set of shuffled numbers. ; 18 ; Used to create 'random' star field. ; 19 ; ; 20 ;==============================================================================; 21 22 ; NASM version: Erdogan Tan, 02/10/2016 23 24 ;=== CODE 25 26 [Bits 16] ; Real Mode (MSDOS) Program 27 28 [org 100h] ; MSDOS COM File 29 30 START: 31 00000000 8CC8 mov ax,cs 32 00000002 8ED8 mov ds,ax 33 00000004 8EC0 mov es,ax 34 35 ; clear BSS 36 00000006 31C0 xor ax, ax 37 00000008 BF[EC05] mov di, bss_start 38 0000000B B9AF06 mov cx, (bss_end-bss_start)+1 39 0000000E D1E9 shr cx, 1 40 00000010 F3AB rep stosw 41 42 00000012 B81300 mov ax,0013h ;set vid mode 320x200x256 graph 43 00000015 CD10 int 10h 44 45 00000017 BA[C904] mov dx,Palette 46 0000001A B81210 mov ax,1012h ; WRITE palette 47 0000001D BB0000 mov bx,0 48 00000020 B90001 mov cx,256 ;write entire palette 49 00000023 CD10 int 10h ;doesn't matter if we didnt define it all 50 51 StarLoop: 52 00000025 E85500 call MakeStar ;make stars 2x as thick 53 00000028 E85200 call MakeStar 54 55 0000002B BADA03 mov dx,3dah 56 VRT: 57 0000002E EC in al,dx 58 0000002F A808 test al,8 59 00000031 75FB jnz short VRT ;wait until Verticle Retrace starts 60 61 NoVRT: 62 00000033 EC in al,dx 63 00000034 A808 test al,8 64 00000036 74FB jz short NoVRT ;wait until Verticle Retrace Ends 65 66 00000038 E8E200 call DisplayStars 67 68 0000003B B401 mov ah,1 ;check to see if a char is ready 69 0000003D CD16 int 16h 70 0000003F 74E4 jz short StarLoop ;nope, continue 71 72 00000041 B400 mov ah,0 73 00000043 CD16 int 16h ;get the character & put in AX 74 75 00000045 3C2B cmp al,"+" ;compare ASCII part (al) to see what was pressed 76 00000047 7513 jne short NotPlus 77 78 00000049 FF06[B904] inc word [WarpSpeed] 79 0000004D 833E[B904]5A cmp word [WarpSpeed],MaxWarp 80 00000052 76D1 jbe short StarLoop 81 82 00000054 C706[B904]5A00 mov word [WarpSpeed],MaxWarp 83 0000005A EBC9 jmp short StarLoop 84 85 NotPlus: 86 0000005C 3C2D cmp al,"-" 87 0000005E 7513 jne short NotMinus 88 89 00000060 FF0E[B904] dec word [WarpSpeed] 90 00000064 833E[B904]00 cmp word [WarpSpeed],0 91 00000069 7DBA jge short StarLoop 92 93 0000006B C706[B904]0000 mov word [WarpSpeed],0 94 00000071 EBB2 Jmp short StarLoop 95 96 NotMinus: 97 98 00000073 B80300 mov ax,0003h ;set 80x25x16 char mode 99 00000076 CD10 int 10h 100 00000078 B8004C mov ax,4c00h ;return control to DOS 101 0000007B CD21 int 21h 102 103 ;=== Code Includes 104 ;=== SUBROUTINES 105 106 ;finds 1st available slot for a star and puts it there 107 MakeStar: 108 0000007D 60 pusha 109 0000007E 8CC8 mov ax,cs 110 00000080 8EC0 mov es,ax 111 00000082 8ED8 mov ds,ax 112 113 00000084 813E[C704]BE00 cmp word [NumActive],MaxStars ;is there room for another star? 114 0000008A 0F838D00 jae NoEmptySpace 115 116 ;search for 1st available slot 117 118 0000008E BE[EC05] mov si, Stars 119 TryAgain: 120 00000091 837C0400 cmp word [Stars.Z+si],0 ;is this slot empty? 121 00000095 740B je short GotOne ;yes, go fill it 122 123 00000097 83C609 add si,StarStrucSize 124 0000009A 81FE[9A0C] cmp si,Stars+(MaxStars*StarStrucSize) 125 0000009E 72F1 jb short TryAgain 126 000000A0 EB79 jmp NoEmptySpace 127 128 GotOne: ;si points to the record for the star to fill 129 000000A2 8B3E[BD04] mov di,[Yindex] ;grab index for Ypos 130 000000A6 01FF add di,di ;multiply by 2 to make it a WORD index 131 000000A8 8B85[9701] mov ax,[StarRnd+di] ;get the number 132 000000AC C1E003 shl ax,3 ;multiply by 8- could been done in BAS file 133 000000AF 894402 mov [Stars.Y+si],ax ;and save off the number 134 135 000000B2 8B3E[BB04] mov di,[Xindex] ;grab index for Xpos 136 000000B6 01FF add di,di ;... same as above, but for Xpos 137 000000B8 8B85[9701] mov ax,[StarRnd+di] 138 000000BC C1E003 shl ax,3 139 000000BF 8904 mov [Stars.X+si],ax 140 141 000000C1 C744040010 mov word [Stars.Z+si],MaxZpos ;reset Zpos to the max 142 000000C6 FF06[C704] inc word [NumActive] ;we added a star so increase the counter 143 144 000000CA 8B3E[BF04] mov di,[Cindex] ;grab the color index 145 000000CE 8A85[C104] mov al,[ColorChart+di] ;grab the BaseColor for the star 146 000000D2 884408 mov [Stars.Color+si],al ;save it in the record 147 148 ;increase all the index pointers 149 150 000000D5 FF06[BF04] inc word [Cindex] ;increases the color counter 151 000000D9 833E[BF04]05 cmp word [Cindex],NumColors 152 000000DE 7206 jb short OkColor 153 000000E0 C706[BF04]0000 mov word [Cindex],0 154 OkColor: 155 000000E6 FF06[BD04] inc word [Yindex] ;increases Yindex 156 000000EA 813E[BD04]9001 cmp word [Yindex],NumRnds ;note that for this one we 157 000000F0 7206 jb short YindNotZero ; subtract NumRnds from Yindex if we 158 000000F2 812E[BD04]9001 sub word [Yindex],NumRnds ; go off the end of the chart 159 YindNotZero: 160 000000F8 FF06[BB04] inc word [Xindex] ;increase Xindex 161 000000FC 813E[BB04]9001 cmp word [Xindex],NumRnds ;have we gone through the entire chart? 162 00000102 7217 jb short XindNotZero ;nope... 163 164 ;This clever bit of code makes more use out of the chart by increasing Yindex 165 ; one additional unit each time Xindex goes through the entire chart... the 166 ; result is nearly NumRND^2 random non-repeating points 167 168 00000104 FF06[BD04] inc word [Yindex] ;yes, so change Yindex so that we get a 169 00000108 A1[BD04] mov ax,[Yindex] ;new set of random (x,y) 170 0000010B 3B06[BB04] cmp ax,[Xindex] ;does Xindex = Yindex? 171 0000010F 7504 jne short NotTheSame ;if the index were the same, you'd see 172 ;a graph of the line Y = X, not good... 173 00000111 FF06[BD04] inc word [Yindex] ;if they are the same, inc Yindex again 174 NotTheSame: 175 00000115 C706[BB04]0000 mov word [Xindex],0 ;reset Xindex to 0 176 XindNotZero: ;all done making the star... 177 178 NoEmptySpace: 179 0000011B 61 popa 180 0000011C C3 retn 181 182 DisplayStars: 183 0000011D 60 pusha 184 0000011E 8CC8 mov ax,cs 185 00000120 8ED8 mov ds,ax 186 00000122 B800A0 mov ax,0a000h 187 00000125 8EC0 mov es,ax 188 189 00000127 BE[EC05] mov si, Stars ; si points to first record 190 DispLoop: 191 0000012A 8B4C04 mov cx,[Stars.Z+si] 192 0000012D 09C9 or cx,cx ;if Zpos = 0 then this star is dead... 193 0000012F 7449 jz short Cont ;continue to the next one- skip this one 194 195 00000131 8B7C06 mov di,[Stars.OldDi+si] ;grab old Di 196 00000134 26C60500 mov byte [es:di],0 ;erase the star 197 198 00000138 83F902 cmp cx,MinZpos 199 0000013B 7C4F jl short TermStar ;if Zpos < MinZpos then kill the star 200 201 0000013D 8B4402 mov ax,[Stars.Y+si] 202 00000140 0FBED4 movsx dx,ah ;'multiply' Ypos by 256 203 00000143 C1E008 shl ax,8 204 205 00000146 F7F9 idiv cx ;and divide by Zpos 206 00000148 83C064 add ax,ScreenHeight/2 ;center it on the screen 207 0000014B 89C7 mov di,ax 208 0000014D 81FFC800 cmp di,ScreenHeight ;see if the star is in range. 209 00000151 7332 jae PreTermStar ; If not, kill it 210 00000153 69FF4001 imul di,ScreenWidth ; DI = Y*ScreenWidth 211 212 00000157 8B04 mov ax,[Stars.X+si] 213 00000159 0FBED4 movsx dx,ah ;multiply Xpos by 256 214 0000015C C1E008 shl ax,8 215 216 0000015F F7F9 idiv cx ;and divide by Zpos 217 00000161 05A000 add ax,ScreenWidth/2 ;center it on the screen 218 00000164 3D4001 cmp ax,ScreenWidth ;are we inside the screen boundries? 219 00000167 731C jae short PreTermStar 220 00000169 01C7 add di,ax ; DI = Y * ScreenWidth + X 221 222 0000016B 897C06 mov [Stars.OldDi+si],di ;save old di 223 224 ;calculate the color below 225 226 0000016E 026C08 add ch,[Stars.Color+si] ;i'm dividing cx (the zpos) by 256 and 227 ; putting the result in ch and adding 228 ; the base color to it in one instruction 229 00000171 26882D mov [es:di],ch ;put the dot on the screen 230 231 00000174 A1[B904] mov ax,[WarpSpeed] 232 00000177 294404 sub [Stars.Z+si],ax ;move the stars inward at WarpSpeed 233 234 Cont: 235 0000017A 83C609 add si,StarStrucSize ;point to next record 236 0000017D 81FE[9A0C] cmp si,Stars+(MaxStars*StarStrucSize) ;are we done yet? 237 00000181 72A7 jb short DispLoop 238 00000183 61 popa 239 00000184 C3 retn 240 241 PreTermStar: 242 00000185 C744040100 mov word [Stars.Z+si],1 ;this is here so that the star will get erased 243 0000018A EBEE jmp short Cont ;next time through if I just went off and killed 244 ;the star, it would leave a dot on the screen 245 TermStar: 246 0000018C C744040000 mov word [Stars.Z+si],0 ;this actually kills the star, after it has 247 00000191 FF0E[C704] dec word [NumActive] ;been erased 248 00000195 EBE3 jmp short Cont 249 250 ;=== GLOBALS 251 ;=== Data Includes 252 253 ;%include starrnd.dw ;file that has label StarRnd numbers 254 255 00000197 A600 StarRnd: dw 166 256 00000199 430066002E0053FF66- dw 67, 102, 46,-173,-154,-210,-192, 173,-196, -81 257 000001A2 FF2EFF40FFAD003CFF- 258 000001AB AFFF 259 000001AD CEFF2400320038FFA1- dw -50, 36, 50,-200, -95, 209, -16,-179, -30, 18 260 000001B6 FFD100F0FF4DFFE2FF- 261 000001BF 1200 262 000001C1 AE00C5007F0047001D- dw 174, 197, 127, 71, 29,-121,-160,-176, 19, -52 263 000001CA 0087FF60FF50FF1300- 264 000001D3 CCFF 265 000001D5 47FF5900AC004A0064- dw -185, 89, 172, 74,-156, 157,-125, 144, -34, 69 266 000001DE FF9D0083FF9000DEFF- 267 000001E7 4500 268 000001E9 1100D8FF40009EFF67- dw 17, -40, 64, -98,-153, 125, 160, 140,-204, 141 269 000001F2 FF7D00A0008C0034FF- 270 000001FB 8D00 271 000001FD 89005BFFF2FF9A006E- dw 137,-165, -14, 154,-146, 119, 123, 165,-130, 168 272 00000206 FF77007B00A5007EFF- 273 0000020F A800 274 00000211 4CFF8F0034006B0095- dw -180, 143, 52, 107,-107,-102, 57, 27, 117, 37 275 0000021A FF9AFF39001B007500- 276 00000223 2500 277 00000225 7E000F00A7FFB80074- dw 126, 15, -89, 184, 116, 183, -99,-139, 150, 188 278 0000022E 00B7009DFF75FF9600- 279 00000237 BC00 280 00000239 26005A005D003EFFCF- dw 38, 90, 93,-194, 207,-187, 62, 59, 196, 12 281 00000242 0045FF3E003B00C400- 282 0000024B 0C00 283 0000024D 52FF3600920077FFC6- dw -174, 54, 146,-137, 198, 162, 155,-163, -77,-144 284 00000256 00A2009B005DFFB3FF- 285 0000025F 70FF 286 00000261 BF007CFFD5FF970099- dw 191,-132, -43, 151,-103, 20, -46, 13,-140, 31 287 0000026A FF1400D2FF0D0074FF- 288 00000273 1F00 289 00000275 820057FF44FF6D00DF- dw 130,-169,-188, 109, -33,-150,-170, 68, -75,-201 290 0000027E FF6AFF56FF4400B5FF- 291 00000287 37FF 292 00000289 9CFF55FFEDFFC3FF32- dw -100,-171, -19, -61,-206, 149, 99, -76,-186, -44 293 00000292 FF95006300B4FF46FF- 294 0000029B D4FF 295 0000029D 4EFF22003D001C0072- dw -178, 34, 61, 28, 114, 199, 201, -83, -27, 63 296 000002A6 00C700C900ADFFE5FF- 297 000002AF 3F00 298 000002B1 DAFFCC00D00090FF30- dw -38, 204, 208,-112,-208, 122, -90, 23,-122, 161 299 000002BA FF7A00A6FF170086FF- 300 000002C3 A100 301 000002C5 230058FFAA005CFF69- dw 35,-168, 170,-164,-151, 75, -60,-109, 85, 193 302 000002CE FF4B00C4FF93FF5500- 303 000002D7 C100 304 000002D9 2D0051FF7AFFCD00EB- dw 45,-175,-134, 205, -21, 49, 133, -85, -47, -37 305 000002E2 FF31008500ABFFD1FF- 306 000002EB DBFF 307 000002ED E3FFA0FFBEFF49008A- dw -29, -96, -66, 73,-118, 147, -53, 120, 153,-155 308 000002F6 FF9300CBFF78009900- 309 000002FF 65FF 310 00000301 F5FF0B005F00E6FF86- dw -11, 11, 95, -26, 134,-145, -49, -74, 42,-124 311 0000030A 006FFFCFFFB6FF2A00- 312 00000313 84FF 313 00000315 BD00D6FF5C0059FF58- dw 189, -42, 92,-167, 88,-126,-129,-108,-193, 195 314 0000031E 0082FF7FFF94FF3FFF- 315 00000327 C300 316 00000329 BE0096FF8BFFCB0054- dw 190,-106,-117, 203, 84, 139,-123, -94, -88,-158 317 00000332 008B0085FFA2FFA8FF- 318 0000033B 62FF 319 0000033D B5009FFFECFF5200C7- dw 181, -97, -20, 82, -57, 112, -35, 14, -56, -58 320 00000346 FF7000DDFF0E00C8FF- 321 0000034F C6FF 322 00000351 C800500049FF6A0057- dw 200, 80,-183, 106, 87, 30, 51, -28, 98, -12 323 0000035A 001E003300E4FF6200- 324 00000363 F4FF 325 00000365 41FF80FFF3FF48FF88- dw -191,-128, -13,-184, 136, 43,-166, -62, -73,-116 326 0000036E 002B005AFFC2FFB7FF- 327 00000377 8CFF 328 00000379 E1FF79FF9BFF190029- dw -31,-135,-101, 25, 41, -82, 110, 10, -45, -41 329 00000382 00AEFF6E000A00D3FF- 330 0000038B D7FF 331 0000038D 6100AF008A00AB0048- dw 97, 175, 138, 171, 72,-133,-157, 58,-104, 187 332 00000396 007BFF63FF3A0098FF- 333 0000039F BB00 334 000003A1 C000BCFFA9FFA90092- dw 192, -68, -87, 169,-110, 91, 129, 104, -70,-114 335 000003AA FF5B0081006800BAFF- 336 000003B3 8EFF 337 000003B5 76FF8DFF73FFBDFF3D- dw -138,-115,-141, -67,-195, -79, -69, 40,-147, -80 338 000003BE FFB1FFBBFF28006DFF- 339 000003C7 B0FF 340 000003C9 89FF800098002FFF53- dw -119, 128, 152,-209, 83, 53, 159, 66,-190, 81 341 000003D2 0035009F00420042FF- 342 000003DB 5100 343 000003DD A4FFF6FF4BFF87003C- dw -92, -10,-181, 135, 60, 33, -25, 70, 22, -72 344 000003E6 002100E7FF46001600- 345 000003EF B8FF 346 000003F1 6700E9FF83004F00C0- dw 103, -23, 131, 79, -64, 55, -86, -32,-182,-136 347 000003FA FF3700AAFFE0FF4AFF- 348 00000403 78FF 349 00000405 1A00CAFF54FF6CFF94- dw 26, -54,-172,-148, 148, -65,-152,-207, -39, -71 350 0000040E 00BFFF68FF31FFD9FF- 351 00000417 B9FF 352 00000419 4100B3004FFF180076- dw 65, 179,-177, 24, 118, -59, -63, 44, 105, 206 353 00000422 00C5FFC1FF2C006900- 354 0000042B CE00 355 0000042D B200ACFF36FF8400BA- dw 178, -84,-202, 132, 186, -17, 76, 176, -22, 177 356 00000436 00EFFF4C00B000EAFF- 357 0000043F B100 358 00000441 3AFF61FF5EFF4E004D- dw -198,-159,-162, 78, 77, -55,-120,-203,-113, 156 359 0000044A 00C9FF88FF35FF8FFF- 360 00000453 9C00 361 00000455 43FF3BFF7C00790072- dw -189,-197, 124, 121,-142, -15,-205, 56, 158, -18 362 0000045E FFF1FF33FF38009E00- 363 00000467 EEFF 364 00000469 A3FF5FFF2700300065- dw -93,-161, 39, 48, 101, -91, 182,-127, 108, 111 365 00000472 00A5FFB60081FF6C00- 366 0000047B 6F00 367 0000047D DCFF71FF15006BFFB2- dw -36,-143, 21,-149, -78, -48, 164, 202, 185, 180 368 00000486 FFD0FFA400CA00B900- 369 0000048F B400 370 00000491 CDFF39FF6400C20020- dw -51,-199, 100, 194, 32, -24, 142, 86,-111, 47 371 0000049A 00E8FF8E00560091FF- 372 000004A3 2F00 373 000004A5 730097FF1000A7005E- dw 115,-105, 16, 167, 94, 163, 96, 113,-131, 145 374 000004AE 00A300600071007DFF- 375 000004B7 9100 376 377 ;=== DATA Structures 378 379 ;Star_Struc STRUC 380 ; X dw 0 381 ; Y dw 0 382 ; Z dw 0 383 ; OldDi dw 0 ;where to erase last dot 384 ; Color db 0 ;BASE color. a number 0-16 is added to it 385 ;Star_Struc ENDS 386 387 ;StarStrucSize = 9 ;number of bytes per entry 388 389 ;=== DATA 390 391 ScreenWidth EQU 320 392 ScreenHeight EQU 200 393 394 NumRnds EQU 400 ;number of random numbers defined 395 396 MaxZpos EQU 4096 397 MinZpos EQU 2 398 MaxStars EQU 190 399 NumColors EQU 5 ;number of Base colors in the Color Chart 400 401 000004B9 0F00 WarpSpeed: dw 15 ;how quickly the stars move toward ya 402 MaxWarp EQU 90 403 404 000004BB 1E00 Xindex: dw 30 ;index into the StarRnd chart for X & Y 405 000004BD E600 Yindex: dw 230 ; -note they must be different; set em the same to 406 ;see why 407 000004BF 0000 Cindex: dw 0 ;index into ColorChart 408 409 000004C1 001020304050 ColorChart: db 0,16,32,48,64,80 ;a list of base colors (-1) 410 411 ;Stars Star_Struc MaxStars DUP (<>) ;where all the data is held 412 000004C7 0000 NumActive: dw 0 ;number of stars active 413 414 Palette: ;the palette.. first entrie is BG color (black) 415 000004C9 000000 db 0,0,0 416 000004CC 1E2D3C db 2*15,3*15,4*15 417 000004CF 1C2A38 db 2*14,3*14,4*14 418 000004D2 1A2734 db 2*13,3*13,4*13 419 000004D5 182430 db 2*12,3*12,4*12 420 000004D8 16212C db 2*11,3*11,4*11 421 000004DB 141E28 db 2*10,3*10,4*10 422 000004DE 121B24 db 2*9,3*9,4*9 423 000004E1 101820 db 2*8,3*8,4*8 424 000004E4 0E151C db 2*7,3*7,4*7 425 000004E7 0C1218 db 2*6,3*6,4*6 426 000004EA 0A0F14 db 2*5,3*5,4*5 427 000004ED 080C10 db 2*4,3*4,4*4 428 000004F0 06090C db 2*3,3*3,4*3 429 000004F3 040608 db 2*2,3*2,4*2 430 000004F6 020304 db 2*1,3*1,4*1 431 000004F9 000000 db 2*0,3*0,4*0 432 000004FC 1E1E3C db 2*15,2*15,4*15 433 000004FF 1C1C38 db 2*14,2*14,4*14 434 00000502 1A1A34 db 2*13,2*13,4*13 435 00000505 181830 db 2*12,2*12,4*12 436 00000508 16162C db 2*11,2*11,4*11 437 0000050B 141428 db 2*10,2*10,4*10 438 0000050E 121224 db 2*9,2*9,4*9 439 00000511 101020 db 2*8,2*8,4*8 440 00000514 0E0E1C db 2*7,2*7,4*7 441 00000517 0C0C18 db 2*6,2*6,4*6 442 0000051A 0A0A14 db 2*5,2*5,4*5 443 0000051D 080810 db 2*4,2*4,4*4 444 00000520 06060C db 2*3,2*3,4*3 445 00000523 040408 db 2*2,2*2,4*2 446 00000526 020204 db 2*1,2*1,4*1 447 00000529 000000 db 2*0,2*0,4*0 448 0000052C 2D2D3C db 3*15,3*15,4*15 449 0000052F 2A2A38 db 3*14,3*14,4*14 450 00000532 272734 db 3*13,3*13,4*13 451 00000535 242430 db 3*12,3*12,4*12 452 00000538 21212C db 3*11,3*11,4*11 453 0000053B 1E1E28 db 3*10,3*10,4*10 454 0000053E 1B1B24 db 3*9,3*9,4*9 455 00000541 181820 db 3*8,3*8,4*8 456 00000544 15151C db 3*7,3*7,4*7 457 00000547 121218 db 3*6,3*6,4*6 458 0000054A 0F0F14 db 3*5,3*5,4*5 459 0000054D 0C0C10 db 3*4,3*4,4*4 460 00000550 09090C db 3*3,3*3,4*3 461 00000553 060608 db 3*2,3*2,4*2 462 00000556 030304 db 3*1,3*1,4*1 463 00000559 000000 db 3*0,3*0,4*0 464 0000055C 2D1E3C db 3*15,2*15,4*15 465 0000055F 2A1C38 db 3*14,2*14,4*14 466 00000562 271A34 db 3*13,2*13,4*13 467 00000565 241830 db 3*12,2*12,4*12 468 00000568 21162C db 3*11,2*11,4*11 469 0000056B 1E1428 db 3*10,2*10,4*10 470 0000056E 1B1224 db 3*9,2*9,4*9 471 00000571 181020 db 3*8,2*8,4*8 472 00000574 150E1C db 3*7,2*7,4*7 473 00000577 120C18 db 3*6,2*6,4*6 474 0000057A 0F0A14 db 3*5,2*5,4*5 475 0000057D 0C0810 db 3*4,2*4,4*4 476 00000580 09060C db 3*3,2*3,4*3 477 00000583 060408 db 3*2,2*2,4*2 478 00000586 030204 db 3*1,2*1,4*1 479 00000589 000000 db 3*0,2*0,4*0 480 0000058C 2D2D2D db 3*15,3*15,3*15 481 0000058F 2A2A2A db 3*14,3*14,3*14 482 00000592 272727 db 3*13,3*13,3*13 483 00000595 242424 db 3*12,3*12,3*12 484 00000598 212121 db 3*11,3*11,3*11 485 0000059B 1E1E1E db 3*10,3*10,3*10 486 0000059E 1B1B1B db 3*9,3*9,3*9 487 000005A1 181818 db 3*8,3*8,3*8 488 000005A4 151515 db 3*7,3*7,3*7 489 000005A7 121212 db 3*6,3*6,3*6 490 000005AA 0F0F0F db 3*5,3*5,3*5 491 000005AD 0C0C0C db 3*4,3*4,3*4 492 000005B0 090909 db 3*3,3*3,3*3 493 000005B3 060606 db 3*2,3*2,3*2 494 000005B6 030303 db 3*1,3*1,3*1 495 000005B9 000000 db 3*0,3*0,3*0 496 000005BC 1E3C2D db 2*15,4*15,3*15 497 000005BF 1C382A db 2*14,4*14,3*14 498 000005C2 1A3427 db 2*13,4*13,3*13 499 000005C5 183024 db 2*12,4*12,3*12 500 000005C8 162C21 db 2*11,4*11,3*11 501 000005CB 14281E db 2*10,4*10,3*10 502 000005CE 12241B db 2*9,4*9,3*9 503 000005D1 102018 db 2*8,4*8,3*8 504 000005D4 0E1C15 db 2*7,4*7,3*7 505 000005D7 0C1812 db 2*6,4*6,3*6 506 000005DA 0A140F db 2*5,4*5,3*5 507 000005DD 08100C db 2*4,4*4,3*4 508 000005E0 060C09 db 2*3,4*3,3*3 509 000005E3 040806 db 2*2,4*2,3*2 510 000005E6 020403 db 2*1,4*1,3*1 511 000005E9 000000 db 2*0,4*0,3*0 512 513 bss_start: 514 515 ABSOLUTE bss_start 516 517 alignb 2 518 519 Star_Struct: 520 Stars.X equ 0 ; X-position of star 521 Stars.Y equ 2 ; Y-position of star 522 Stars.Z equ 4 ; Z-position of star 523 Stars.OldDi equ 6 ; Where to erase old star 524 Stars.Color equ 8 ; Color of star 525 526 StarStrucSize equ 9 ; Number of bytes per entry ( 4 wordz and a byte ) 527 528 Stars: 529 000005EC resb StarStrucSize * MaxStars ; Array of star-records 530 531 bss_end: