-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathSTUB.LST
4619 lines (4382 loc) · 161 KB
/
STUB.LST
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Turbo Assembler Version 4.1 04/18/00 15:43:11 Page 1
stub.asm
1
2 ; ÄÄÄ void three extender ÄÄÄ (c) 2k-1 by [email protected] ÄÄÄ
3
4 .586p
5 .SEQ
6
7 =01000000 MEM_POOL = 16 SHL 20 ;16 MB memory pool
8
9 ASSUME CS:HYBRID, DS:HYBRID
10 HYBRID GROUP CODE_16, CODE_32, DATA, ZDATA
11
12 0000 CODE_16 SEGMENT BYTE USE16
13 0000 CODE_16 ENDS
14
15 00000000 CODE_32 SEGMENT BYTE USE32
16 00000000 CODE_32 ENDS
17
18 0000 DATA SEGMENT BYTE USE16
19 0000 DATA ENDS
20
21 0000 ZDATA SEGMENT DWORD USE16
22 0000 ZDATA ENDS
23
24 00000000 SCREEN SEGMENT AT 0a000h
25 00000000 SCREEN ENDS
26
27 ; °°°±±±±±±²²²²²²²²²²²²ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
28
29 0000 CODE_16 SEGMENT
30
31 ORG 100h ;þþþþþ program entry þþþþþ
32
33 0100 rm_main:
34 0100 BF 0000r lea di, ZERO_START ;ÄÄÄ clear zero data ÄÄÄ
35 0103 B5 D6 mov ch, 55000 SHR 8
36 0105 F3> AA rep stosb
37
38 0107 B8 1687 mov ax, 1687h ;ÄÄÄ DPMI installed? ÄÄÄ
39 010A CD 2F int 2fh
40 010C 40 inc ax
41 010D 23 D8 and bx, ax ;32-bit host ?
42 010F 75 3C jnz @@dpmi
43
44 0111 BA 0119r lea dx, no_dpmi ;error, exit
45 0114 B4 09 mov ah, 9h
46 0116 CD 21 int 21h
47 0118 C3 ret
48
49 0119 6E 6F 20 44 50 4D 49+ no_dpmi db "no DPMI host found! please start in w95/w98 dosbox!$"
50 20 68 6F 73 74 20 66+
51 6F 75 6E 64 21 20 70+
52 6C 65 61 73 65 20 73+
53 74 61 72 74 20 69 6E+
54 20 77 39 35 2F 77 39+
55 38 20 64 6F 73 62 6F+
56 78 21 24
57
Turbo Assembler Version 4.1 04/18/00 15:43:11 Page 2
stub.asm
58 014D @@dpmi:
59 014D 06 57 push es di
60
61 014F 8C C8 mov ax, cs ;ÄÄÄ get linear address ÄÄÄ
62 0151 66| 6B C0 F0 imul eax, -16
63 0155 66| 50 push eax
64
65 0157 CODE_16 ENDS
66
67 include franky.rm ;franky: RM code
1 68
1 69 ; ÄÄÄ copyright (c) 2k-1 by frank baumgartner ([email protected]) ÄÄÄ
1 70
1 71 ;
1 72 ; SB DMA output : ca. 200 bytes (original RM version: 169 bytes)
1 73 ;
1 74
1 75 =AC44 SAMP_RATE = 44100 ;Hz
1 76 =1000 DMA_BUFSIZE = 4096 ;bytes
1 77
1 78 =D000 DMA_BUFOFF = ( 65536 - 2*4096 - DMA_BUFSIZE )
1 79
1 80 =0020 SPEED = 32 ;ÄÄÄ sequencer ÄÄÄ
1 81 =0300 BPM = 768
1 82 =0133 TIMER_FREQ = ( BPM*2/5 )
1 83
1 84 =0006 _DSP_RESET = 06h ;ÄÄÄ DSP ports ÄÄÄ
1 85 =000A _DSP_READ = 0ah
1 86 =000C _DSP_WRITE = 0ch
1 87 =000E _DSP_STATUS = 0eh
1 88
1 89 =0040 DC_TIMECONST = 40h ;ÄÄÄ DSP commands ÄÄÄ
1 90 =0048 DC_DMASIZE = 48h
1 91 =0090 DC_AUTO8BIT = 90h ;(high speed)
1 92 =00D1 DC_SPKR_ON = 0d1h
1 93
1 94 = byte ptr bptr EQU byte ptr
1 95 = word ptr wptr EQU word ptr
1 96 = dword ptr dptr EQU dword ptr
1 97
1 98
1 99 font_decode MACRO
1 100
1 101 ; ÄÄÄ get & decode bios font ÄÄÄ
1 102
1 103 mov ax, 1130h ;get 8x8 bios-font ...
1 104 mov bh, 3
1 105 int 10h ;font -> ES:BP
1 106 mov bx, -8*256
1 107 @copyloop:
1 108 mov al, es:[bp]
1 109 mov font_buf[bx+8*256], al
1 110 inc bp
1 111 inc bx
1 112 jnz @copyloop
1 113 ENDM
1 114
Turbo Assembler Version 4.1 04/18/00 15:43:11 Page 3
stub.asm
1 115 0157 CODE_16 SEGMENT
1 116
1 117 0157 rm_entry: ;þþþ RM init code þþþ
1 118
1 119 font_decode ;ÄÄÄ decode bios font ÄÄÄ
2 120 0157 B8 1130 mov ax, 1130h ;get 8x8 bios-font ...
2 121 015A B7 03 mov bh, 3
2 122 015C CD 10 int 10h ;font -> ES:BP
2 123 015E BB F800 mov bx, -8*256
2 124 0161 @copyloop:
2 125 0161 26: 8A 46 00 mov al, es:[bp]
2 126 0165 88 87 0E85r mov font_buf[bx+8*256], al
2 127 0169 45 inc bp
2 128 016A 43 inc bx
2 129 016B 75 F4 jnz @copyloop
1 130
1 131 016D 68 01FBr push OFFSET sound_start
1 132
1 133 0170 sound_ask: ;ÄÄÄ SB quiz ÄÄÄ
1 134
1 135 0170 BA 019Cr lea dx, msg_base ;get SB base
1 136 0173 E8 000B call @@ask
1 137 0176 C0 E0 04 shl al, 4
1 138 0179 B4 02 mov ah, 02h
1 139 017B A3 0017r mov intro_zero.sb_base, ax
1 140
1 141
1 142
1 143 017E BA 01D4r lea dx, msg_dma ;get SB dma
1 144 0181 @@ask:
1 145 0181 B4 09 mov ah, 09h
1 146 0183 CD 21 int 21h
1 147 0185 33 C0 xor ax, ax
1 148 0187 CD 16 int 16h
1 149 0189 37 aaa
1 150 018A A2 0015r mov bptr intro_zero.sb_dma, al
1 151
1 152 018D C3 ret
1 153
1 154 018E dsp_reset: ;ÄÄÄ DSP reset ÄÄÄ
1 155
1 156 018E 33 C0 xor ax, ax
1 157 0190 40 inc ax
1 158 0191 80 C2 06 add dl, _DSP_RESET
1 159
1 160 0194 B5 10 mov ch, 10h ;DSP reset
1 161 0196 EE @@r: out dx, al
1 162 0197 E2 FD loop @@r
1 163
1 164 0199 48 dec ax ;DSP reset end
1 165 019A EE out dx, al
1 166 019B C3 ret
1 167
1 168 019C sound_data: ;ÄÄÄ constant SB data ÄÄÄ
1 169
1 170 019C 53 6F 75 6E 64 42 6C+ msg_base db "SoundBlaster base address ? ( 1 = 210h, 2 = 220h, ... )", +
171 61 73 74 65 72 20 62+ 24h
Turbo Assembler Version 4.1 04/18/00 15:43:11 Page 4
stub.asm
172 61 73 65 20 61 64 64+
173 72 65 73 73 20 3F 20+
174 28 20 31 20 3D 20 32+
175 31 30 68 2C 20 32 20+
176 3D 20 32 32 30 68 2C+
177 20 2E 2E 2E 20 29 24
1 178 01D4 0D 0A 64 6D 61 20 3F+ msg_dma db 13, 10, "dma ? ( 0, 1 or 3 )", 24h
179 20 28 20 30 2C 20 31+
180 20 6F 72 20 33 20 29+
181 24
1 182
1 183 01EA 87 83 81 82 dma_page db 87h, 83h, 81h, 82h
1 184
1 185 01EE 40 dsp_init_tab db DC_TIMECONST
1 186 01EF E9 db NOT (1000000 / SAMP_RATE)
1 187 01F0 48 db DC_DMASIZE
1 188 01F1 07FF dw (DMA_BUFSIZE + 1)/2 - 1
1 189 01F3 D1 db DC_SPKR_ON
1 190 01F4 90 db DC_AUTO8BIT
1 191
1 192 01F5 0FFF dma_init_tab dw DMA_BUFSIZE - 1
1 193 01F7 58 db 58h
1 194
1 195 01F8 36 timer_frq db 36h
1 196 01F9 0F2E dw 1193180 / TIMER_FREQ
1 197
1 198
1 199 01FB sound_start: ;ÄÄÄ start DMA output ÄÄÄ
1 200
1 201 01FB BE 01EEr lea si, dsp_init_tab
1 202
1 203 ; ÄÄÄ DSP setup ÄÄÄ
1 204
1 205 01FE 8B 16 0017r mov dx, intro_zero.sb_base
1 206 0202 E8 FF89 call dsp_reset ;reset DSP
1 207
1 208 0205 80 C2 06 add dl, _DSP_WRITE - _DSP_RESET
1 209
1 210 0208 B1 07 mov cl, 7
1 211 020A @@init:
1 212 020A EC in al, dx ;wait for DSP
1 213 020B 84 C0 test al, al
1 214 020D 78 FB js @@init
1 215 020F AC lodsb ;write to DSP
1 216 0210 EE out dx, al ; (outsb doesn't work on PCI emu's)
1 217 0211 E2 F7 loop @@init
1 218
1 219 ; ÄÄÄ DMA controller setup ÄÄÄ
1 220
1 221 0213 8C D8 mov ax, ds ;calculate DMA mem address
1 222 0215 05 0D00 add ax, DMA_BUFOFF SHR 4
1 223 0218 32 C0 xor al, al
1 224 021A A3 0019r mov intro_zero.sb_dmaseg, ax
1 225 021D E6 0D out 0dh, al ;reset DMA controller
1 226 021F E6 0C out 0ch, al
1 227
1 228 0221 8B 1E 0015r mov bx, intro_zero.sb_dma
Turbo Assembler Version 4.1 04/18/00 15:43:11 Page 5
stub.asm
1 229 0225 6B D3 02 imul dx, bx, 2 ;write DMA mem address
1 230 0228 EE out dx, al
1 231 0229 C1 E8 04 shr ax, 4
1 232 022C EE out dx, al
1 233
1 234 022D 42 inc dx ;write DMA block length
1 235 022E 6E outsb
1 236 022F 6E outsb
1 237
1 238 0230 8A 97 01EAr mov dl, dma_page[ bx ] ;write DMA page
1 239 0234 86 C4 xchg al, ah
1 240 0236 EE out dx, al
1 241
1 242 0237 AC lodsb ;write DMA transfer mode
1 243 0238 02 C3 add al, bl
1 244 023A E6 0B out 0bh, al
1 245
1 246 023C 93 xchg ax, bx ;mask DMA channel
1 247 023D E6 0A out 0ah, al
1 248
1 249 ; ÄÄÄ RTC setup ÄÄÄ
1 250
1 251 023F B2 43 mov dl, 43h ;set RTC frequency ...
1 252 0241 6E outsb
1 253 0242 B2 40 mov dl, 40h
1 254 0244 6E outsb
1 255 0245 6E outsb
1 256
1 257 0246 CODE_16 ENDS
1 258
1 259
1 260 ; ÄÄÄ PM stuff ÄÄÄ PM stuff ÄÄÄ PM stuff ÄÄÄ PM stuff ÄÄÄ PM stuff ÄÄÄ
1 261
1 262 sb_dma_pos MACRO ;returns: esi = current DMA position
1 263 ; es = DMA buffer selector
1 264 xor eax, eax
1 265 out 0ch, al ;clear DMA addr. flipflop
1 266
1 267 ;get port nr.
1 268 imul edx, dptr [ebx].sb_dma, 2
1 269 inc edx
1 270
1 271 mov al, 02h ;get DMA buffer selector
1 272 mov ebx, dptr [ebx].sb_dmaseg
1 273 int 31h
1 274 mov sb_dmasel, ax
1 275 mov es, eax
1 276
1 277 mov bx, DMA_BUFSIZE - 1
1 278 in al, dx ;get DMA buffer position
1 279 sub bl, al
1 280 in al, dx
1 281 sbb bh, al
1 282 movzx esi, bx
1 283
1 284 ENDM
1 285
Turbo Assembler Version 4.1 04/18/00 15:43:11 Page 6
stub.asm
1 286 debug_save MACRO name, ptr, len ;ÄÄÄ debug: file save ÄÄÄ
1 287
1 288 mov ah, 3ch ;open file
1 289 xor cx, cx
1 290 lea edx, dbg_name
1 291 int 21h
1 292 xchg bx, ax
1 293
1 294 mov ah, 40h ;write data
1 295 lea edx, ptr
1 296 mov ecx, len
1 297 int 21h
1 298
1 299 mov ah, 3eh ;close file
1 300 int 21h
1 301 jmp @@dbg_done
1 302
1 303 dbg_name db name, 0
1 304
1 305 @@dbg_done:
1 306
1 307 ENDM
1 308
1 309
1 310
311 include shiva.rm ;shiva : RM code
1 312
1 313 0246 CODE_16 SEGMENT
1 314
1 315 0246 1E push ds
1 316 0247 07 pop es
1 317
1 318 0248 BA 02A9r lea dx, [video_ask]
1 319 024B B4 09 mov ah, 09
1 320 024D CD 21 int 21h
1 321 024F 33 C0 xor ax, ax
1 322 0251 CD 16 int 16h
1 323 ;al=mode select number
1 324 0253 2C 30 sub al, '0'
1 325 0255 3C 02 cmp al, 2
1 326 0257 77 36 ja @stupiduser
1 327 0259 A2 3C55r mov vmode, al
1 328 025C 75 1F jnz @setvesa
1 329 025E B8 0013 mov ax, 013h
1 330 0261 CD 10 int 010h
1 331 0263 BA 03C8 mov dx, 03c8h
1 332 0266 32 C0 xor al, al
1 333 0268 EE out dx, al
1 334 0269 42 inc dx
1 335 026A B9 00FF mov cx, 255
1 336 026D @grayloop:
1 337 026D 8A C1 mov al, cl
1 338 026F F6 D0 not al
1 339 0271 C0 E8 02 shr al, 2
1 340 0274 EE out dx, al
1 341 0275 EE out dx, al
1 342 0276 EE out dx, al
Turbo Assembler Version 4.1 04/18/00 15:43:11 Page 7
stub.asm
1 343 0277 49 dec cx
1 344 0278 79 F3 jns @grayloop
1 345 027A E9 00A5 jmp @modesetanddone
1 346 027D @setvesa:
1 347
1 348 ;set vesa mode
1 349 ;get a buffer... i just hope that there is free space after 4f00h
1 350
1 351 027D B8 4F00 mov ax, 04f00h ;Super VGA information block to es:di
1 352 0280 8B F8 mov di, ax ;just use buffer es:04f00h
1 353 0282 CD 10 int 10h
1 354
1 355 0284 3C 4F cmp al, 04fh
1 356 0286 74 59 je @vesaok
1 357
1 358 0288 @vesaerror:
1 359 0288 BA 0293r lea dx, vbe_err
1 360 028B B4 09 mov ah, 09
1 361 028D CD 21 int 21h
1 362 028F @stupiduser:
1 363 .exit
2 364 028F B4 4C MOV AH,4Ch
2 365 0291 CD 21 INT 21h
1 366
1 367 0293 00 65 72 72 6F 72 3A+ vbe_err db 0, "error: vesa failure.$"
368 20 76 65 73 61 20 66+
369 61 69 6C 75 72 65 2E+
370 24
1 371 02A9 0D 0A 56 69 64 65 6F+ video_ask db 13,10,"Video? [0=320x240x32b, 1=640x480x32b, 2=320x200xMono]$"
372 3F 20 5B 30 3D 33 32+
373 30 78 32 34 30 78 33+
374 32 62 2C 20 31 3D 36+
375 34 30 78 34 38 30 78+
376 33 32 62 2C 20 32 3D+
377 33 32 30 78 32 30 30+
378 78 4D 6F 6E 6F 5D 24
1 379
1 380 02E1 @vesaok:
1 381 02E1 8B 75 0E mov si, [di+14] ;pointer to vesa modes list
1 382 02E4 8E 65 10 mov fs, [di+16]
1 383 02E7 81 C7 0100 add di, 256
1 384 02EB @nextmode:
1 385 02EB 64: 8B 0C mov cx, fs:[si]
1 386 02EE AD lodsw
1 387 02EF 41 inc cx
1 388 02F0 74 96 jz @vesaerror ;end of mode list
1 389 02F2 49 dec cx
1 390
1 391 ;set mode cx, and check wether it is 320*240*32bit
1 392
1 393 02F3 B8 4F01 mov ax, 4f01h ;es:di still points to our buffer
1 394 02F6 CD 10 int 10h
1 395
1 396 02F8 80 3E 3C55r 01 cmp vmode, 1
1 397 02FD 74 0C je @hires1
1 398 02FF 66| 81 7D 12 + cmp dword ptr [di+18], 00f00140h
399 00F00140
Turbo Assembler Version 4.1 04/18/00 15:43:11 Page 8
stub.asm
1 400 0307 75 E2 jne @nextmode
1 401 0309 EB 0A jmp @getdepth
1 402
1 403 030B @hires1:
1 404 030B 66| 81 7D 12 + cmp dword ptr [di+18], 01e00280h
405 01E00280
1 406 0313 75 D6 jne @nextmode
1 407
1 408 0315 @getdepth:
1 409 0315 80 7D 19 20 cmp byte ptr [di+25], 32
1 410 0319 75 D0 jne @nextmode
1 411
1 412 ;found our mode! cool! let's set it.
1 413 031B B8 4F02 mov ax, 04f02h
1 414 031E 87 D9 xchg bx, cx
1 415 0320 CD 10 int 10h
1 416
1 417 0322 @modesetanddone:
1 418
1 419 ;mode set & done
1 420
1 421 0322 CODE_16 ENDS
1 422
1 423
1 424
425
426 0322 CODE_16 SEGMENT
427
428 0322 66| 5D pop ebp ;ebp = linear address
429
430 0324 8C DB mov bx, ds ;ÄÄÄ 16-bit PM switch ÄÄÄ
431 0326 80 C7 10 add bh, 10h
432 0329 8E C3 mov es, bx
433 032B 33 C0 xor ax, ax
434 032D 40 inc ax
435 032E 67| FF 1C 24 call dword ptr [ esp ]
436 0332 pm_16:
437 0332 B0 0A mov al, 0ah ;ÄÄÄ get alias ÄÄÄ
438 0334 8C CB mov bx, cs
439 0336 CD 31 int 31h
440 0338 93 xchg bx, ax
441
442 0339 B0 08 mov al, 08h ;ÄÄÄ set limit ÄÄÄ
443 033B F9 stc
444 033C 1B C9 sbb cx, cx
445 033E 1B D2 sbb dx, dx
446 0340 CD 31 int 31h
447
448 0342 40 inc ax ;ÄÄÄ set rights ÄÄÄ
449 0343 B9 DFFB mov cx, 1101111111111011b
450 0346 CD 31 int 31h
451
452 0348 53 push bx ;ÄÄÄ 32-bit PM switch ÄÄÄ
453 0349 68 034Dr push OFFSET pm_32
454 034C CB retf
455 034D pm_32:
456 034D CODE_16 ENDS
Turbo Assembler Version 4.1 04/18/00 15:43:11 Page 9
stub.asm
457
458 00000000 CODE_32 SEGMENT
459 ;ÄÄÄ 32-bit PM entry ÄÄÄ
460 00000000 40 inc eax
461 00000001 CD 31 int 31h
462 00000003 50 push eax
463 00000004 1F pop ds ;set up DS, ES, SS
464 00000005 50 push eax
465 00000006 07 pop es
466 00000007 50 push eax
467 00000008 17 pop ss
468
469 00000009 66| B8 0501 mov ax, 0501h ;ÄÄÄ create memory pool ÄÄÄ
470 0000000D 33 C9 xor ecx, ecx
471 0000000F 66| BB 0100 mov bx, MEM_POOL SHR 16
472 00000013 CD 31 int 31h
473 00000015 C1 E3 10 shl ebx, 16
474 00000018 03 EB add ebp, ebx
475 0000001A 03 E9 add ebp, ecx ;[ebp] -> memory pool
476
477 0000001C 33 C0 xor eax, eax
478 0000001E B9 00FFFFFF mov ecx, MEM_POOL - 1 ;ÄÄÄ clear mem-pool ÄÄÄ
479 00000023 8B FD mov edi, ebp
480 00000025 F3> AA rep stosb
481
482 00000027 CODE_32 ENDS
483
484 include shiva.mac
1 485 prepareblitter MACRO
1 486 xor eax, eax
1 487 mov al, vmode
1 488 mov ebx, [eax*4+flipfunctions]
1 489 mov flipfunction, ebx
1 490 endm
1 491
1 492 initfont MACRO
1 493
1 494 mov dl, 255
1 495 ; xor ecx, ecx
1 496 lea esi, [font_buf]
1 497 lea edi, [softfont]
1 498 push edi
1 499 @letterloop:
1 500 mov cl, 32
1 501 @yfloop:
1 502 test cl, 011b
1 503 jnz @noload
1 504 lodsb
1 505 @noload:
1 506 push eax
1 507 mov ch, 8
1 508 @xfloop:
1 509 add al, al
1 510 jnc @nopixel
1 511 ;dec dword ptr [edi]
1 512 mov dword ptr [edi], 03f3f3f3fh
1 513 @nopixel:
Turbo Assembler Version 4.1 04/18/00 15:43:11 Page 10
stub.asm
1 514 add edi, 4
1 515 dec ch
1 516 jnz @xfloop
1 517 pop eax
1 518 add edi, 32
1 519 loop @yfloop
1 520 add edi, 32*64
1 521 dec dl
1 522 jnz @letterloop
1 523 pop edi
1 524
1 525 mov cl, 8
1 526 @blurallloop:
1 527 push edi
1 528 mov ebx, 32*32*256*2
1 529 @blurloop:
1 530 mov al, [edi-64]
1 531 add al, [edi-1]
1 532 add al, [edi+1]
1 533 add al, [edi+64]
1 534 shr al, 2
1 535 stosb
1 536 dec ebx
1 537 jnz @blurloop
1 538 pop edi
1 539 loop @blurallloop
1 540 ENDM
1 541
1 542 ;al = letter, edi = dest
1 543 writeletter MACRO
1 544 movzx eax, al
1 545 shl eax, 12
1 546 lea esi, [softfont+eax-4-32*8]
1 547 mov bl, 32+16
1 548 @ywlloop:
1 549 mov ecx, 32+8
1 550 @copyloopwl:
1 551 lodsb
1 552 shl al, 2
1 553 mov bh, 4
1 554 @comploop:
1 555 push eax
1 556 mov ah, [edi]
1 557 sub ah, al
1 558 ;sub ah, [edi]
1 559 db 0d6h
1 560 not al
1 561 and al, ah
1 562 stosb
1 563 pop eax
1 564 dec bh
1 565 jnz @comploop
1 566 loop @copyloopwl
1 567 add esi, 32-8
1 568 add edi, (320-(32+8))*4
1 569 dec bl
1 570 jnz @ywlloop
Turbo Assembler Version 4.1 04/18/00 15:43:11 Page 11
stub.asm
1 571 ENDM
1 572
1 573 writestring MACRO
1 574 db 0beh
1 575 textline:
1 576 dd offset @nullstring
1 577
1 578 xor edx, edx
1 579 lodsb
1 580 mov ecx, eax
1 581 imul eax, -30*2
1 582 lea edi, [ebp+(320*(120-24))*4+160*4+eax]
1 583 @letterloop2:
1 584 inc edx
1 585 lodsb
1 586
1 587 pushad
1 588 add edx, globalt
1 589 movzx ebx, byte ptr [noisemap+edx*2]
1 590 and bl, 01111b
1 591 add edi, ebx
1 592
1 593 movzx ebx, byte ptr [noisemap+edx*2+1]
1 594 and bl, 0111b
1 595
1 596 imul ebx, 320*4
1 597 add edi, ebx
1 598 writeletter
1 599 popad
1 600 add edi, 30*4
1 601 dec cl
1 602 jnz @letterloop2
1 603 ENDM
1 604
1 605 runscript MACRO
1 606 mov esi, scriptptr
1 607 @runagain:
1 608 mov ebx, nextt
1 609 cmp globalt, ebx
1 610 jna @norun
1 611 xor eax, eax
1 612 lodsb
1 613 cmp al, 255
1 614 jz @exit
1 615 add ebx, eax
1 616 mov nextt, ebx
1 617 cmp al, 254
1 618 jz @norun
1 619 ; xor eax, eax
1 620 lodsw
1 621 mov bl, ah
1 622 and ah, 00111111b
1 623 lea edi, [eax+baseoffset]
1 624 xor eax, eax
1 625 test bl, 010000000b
1 626 jz @no_rel
1 627 lodsw
Turbo Assembler Version 4.1 04/18/00 15:43:11 Page 12
stub.asm
1 628 lea eax, [eax+baseoffset]
1 629 stosd
1 630 jmp @runagain
1 631 @no_rel:
1 632 test bl, 001000000b
1 633 jz @no_byte
1 634 lodsb
1 635 stosd
1 636 jmp @runagain
1 637 @no_byte:
1 638 lodsb
1 639 shl eax, 18
1 640 lea eax, [eax+texturebase]
1 641 stosd
1 642 jmp @runagain
1 643 @norun:
1 644 mov scriptptr, esi
1 645 ENDM
1 646
1 647 makeshademap MACRO
1 648 lea edi, [shademap]
1 649 ; mov ecx, 0ffffh
1 650 dec cx
1 651 @loopme:
1 652 mov al, cl
1 653 not al
1 654 sub al, ch
1 655 jnc @noclamplo
1 656 xor al, al
1 657 @noclamplo:
1 658 stosb
1 659 loop @loopme
1 660 ENDM
1 661
1 662 ;esi = source1 edi = source2&dest eax = weight
1 663 xfade MACRO
1 664 shl eax, 8
1 665 mov ebx, eax
1 666 not bh
1 667 mov ecx, 320*240*4
1 668 lea edx, [shademap]
1 669 @xfadeloop:
1 670 mov bl, [edi]
1 671 ;lodsb
1 672 mov al, bl
1 673 not al
1 674
1 675 mov al, [edx+eax]
1 676 add al, [edx+ebx]
1 677 mov [edi], al
1 678 inc edi
1 679 dec ecx
1 680 jnz @xfadeloop
1 681 ENDM
1 682
1 683 makematrix MACRO
1 684 ;shift the buffer forward
Turbo Assembler Version 4.1 04/18/00 15:43:11 Page 13
stub.asm
1 685 lea esi, [matrixbuffer+(127*3*3*8-4)]
1 686 lea edi, [esi+3*3*8]
1 687 mov ecx, 127*3*3*2
1 688 std
1 689 rep movsd
1 690 cld
1 691 ;copy old matrix to buffer
1 692 lea esi, [matrix]
1 693 push esi
1 694 lea edi, [esi+3*3*8]
1 695 mov cl, 3*3*2
1 696 rep movsd
1 697 pop edi
1 698 ;generate matrix
1 699 ;mov esi, 0
1 700 db 0beh
1 701 rotspeed:
1 702 dd 0
1 703 makerotmat
1 704 ENDM
1 705
1 706 makealltextures MACRO
1 707 ; mov ecx, nr_textures
1 708 mov cl, nr_textures
1 709 lea edi, [textures]
1 710 lea esi, [testtextdesc]
1 711 ; mov ebx, ebp
1 712 @nexttexture:
1 713 call precalc_dot
1 714 pushad
1 715 call synthtexture
1 716 popad
1 717 xor eax, eax
1 718 lodsb
1 719 imul eax, 9
1 720 add esi, eax
1 721 lodsw
1 722 add edi, 256*256*4
1 723 loop @nexttexture
1 724 ENDM
1 725
1 726 ;edi = dest, ebx=grid function
1 727 rendergrid MACRO
1 728 ;clear top
1 729 mov ecx, 320*30
1 730 xor eax, eax
1 731 rep stosd
1 732
1 733 lea esi, [grid]
1 734 pushad
1 735 mov cl, (180/8)+1
1 736 @ygridloop:
1 737 mov ch, (320/8)+1
1 738 @xgridloop:
1 739 call ebx
1 740 mov al, 3
1 741 @shiftmedumb:
Turbo Assembler Version 4.1 04/18/00 15:43:11 Page 14
stub.asm
1 742 shl dword ptr [esi], 2
1 743 add esi, 4
1 744 dec al
1 745 jnz @shiftmedumb
1 746 dec ch
1 747 jnz @xgridloop
1 748 loop @ygridloop
1 749 popad
1 750
1 751 mov cl, (180/8)
1 752 @ygridloopdraw:
1 753 mov ch, (320/8)
1 754 @xgridloopdraw:
1 755 push edi
1 756 call drawblock
1 757 pop edi
1 758 add edi, 8*4
1 759 add esi, 12
1 760 dec ch
1 761 jnz @xgridloopdraw
1 762 add esi, 12
1 763 add edi, 320*4*7
1 764 loop @ygridloopdraw
1 765
1 766 mov ecx, 34*320
1 767 xor eax, eax
1 768 rep stosd
1 769 ENDM
1 770
1 771 ;edi=target esi=(value!) rotation speed
1 772 makerotmat MACRO
1 773 mov al, 2
1 774 @preploop:
1 775 fild globalt
1 776 push esi
1 777 fimul dword ptr [esp]
1 778 pop esi
1 779 fidiv i_255
1 780 fsincos
1 781 fxch st(1)
1 782 dec al
1 783 jnz @preploop
1 784
1 785 ;sy cy sx cx
1 786 fldz
1 787 fstp qword ptr [edi+8*1]
1 788 fst qword ptr [edi+8*2]
1 789 fxch st(1)
1 790 ;cy sy sx cx
1 791 fst qword ptr [edi+8*0] ;first row
1 792
1 793 fxch st(3)
1 794 ;cx sy sx cy
1 795 fst qword ptr [edi+8*4]
1 796 fxch st(2)
1 797 ;sx sy cx cy
1 798 fst qword ptr [edi+8*7]
Turbo Assembler Version 4.1 04/18/00 15:43:11 Page 15
stub.asm
1 799 fld st(0)
1 800 ;sx sx sy cx cy
1 801 fmul st(0), st(2)
1 802 fstp qword ptr [edi+8*3]
1 803 fld st(2)
1 804 ;cx sx sy cx cy
1 805 fmul st(0), st(4)
1 806 fstp qword ptr [edi+8*8]
1 807 ;sx sy cx cy
1 808 fchs
1 809 fmulp st(3), st(0)
1 810 ;sy cx cy*sx
1 811 fchs
1 812 fmulp st(1), st(0)
1 813 fstp qword ptr [edi+8*6]
1 814 fstp qword ptr [edi+8*5]
1 815
1 816 ENDM
1 817
1 818 makenoise MACRO
1 819 mov eax, 01234h
1 820 mov ecx, 1024*1024
1 821 lea edi, [noisemap]
1 822 @bigloop:
1 823 mov dl, 4
1 824 @randloop:
1 825 mov ebx, eax
1 826 shr ebx, 3
1 827 xor ebx, eax
1 828 shr ebx, 1
1 829 rcr eax, 1
1 830 dec dl
1 831 jnz @randloop
1 832 stosb
1 833 loop @bigloop
1 834 ENDM
1 835
1 836 initfastperlin MACRO
1 837 ; xor ecx, ecx
1 838 lea esi, [@nrbase1]
1 839 @initloop:
1 840 push ecx
1 841 fild dword ptr [esp]
1 842 pop ecx
1 843 fidiv word ptr [esi]
1 844 fldpi
1 845 fmulp st(1), st(0)
1 846 fcos
1 847 fild word ptr [esi+2]
1 848 fmul st(1), st(0)
1 849 fxch st(1)
1 850 fsubp st(1), st(0)
1 851 fistp dword ptr costab[ecx*4]
1 852 inc cl
1 853 jnz @initloop
1 854 ENDM
1 855
Turbo Assembler Version 4.1 04/18/00 15:43:11 Page 16
stub.asm
1 856
1 857
858 include franky.pm
1 859
1 860 ; ÄÄÄ copyright (c) 2k-1 by frank baumgartner ([email protected]) ÄÄÄ
1 861
1 862 ; ow, ow! shiva did all the gfx, so why has only franky such a cool
1 863 ; headline in this source file? Just because he wrote it? Bad franky!
1 864
1 865 ;
1 866 ; ÄÄÄ special thanks to: ÄÄÄ
1 867 ;
1 868 ; - Masamichi Kirikae ... designer of voice spectra vocoder,
1 869 ; gave me cool tips & techical info!
1 870 ; - Acoustical Society
1 871 ; of America ... for sending me a copy of
1 872 ; Dennis H. Klatt's article about
1 873 ; speech analysis & synthesis
1 874 ; - Danko,
1 875 ; Magic^Singularity
1 876 ; Wilfried Welti ... for more general tips
1 877 ;
1 878
1 879 ;DEBUG = 1
1 880
1 881 =1324 DELAY_LEN = ( SAMP_RATE / 9 )
1 882
1 883 =00400000 DELAY_OFF = ( 4 SHL 20 ) ;ÄÄÄ mem-pool ÄÄÄ
1 884 =00410000 VOCODER_OFF = DELAY_OFF + 10000h
1 885
1 886 =006E VC_SPF = 110
1 887
1 888 00000000 T_INTRO_ZERO STRUC ;ÄÄÄ zero data ÄÄÄ
1 889
1 890 00000000 01*(????????) timer dd ? ;ÄÄÄ intro timer ÄÄÄ
1 891 00000004 01*(????) timer_ctrl dw ?
1 892 00000006 01*(????????) timer_ctrl_pos dd ?
1 893 0000000A 01*(??) timer_flags db ?
1 894 0000000B 01*(????????) sq_pos dd ?
1 895 0000000F 01*(????????) pm_mpool dd ?
1 896 00000013 01*(????) pm_ds dw ?
1 897
1 898 00000015 01*(????) sb_dma dw ? ;ÄÄÄ SB DMA output ÄÄÄ
1 899 00000017 01*(????) sb_base dw ?
1 900 00000019 01*(????) sb_dmaseg dw ?
1 901 0000001B 01*(????????) sb_mixpos dd ?
1 902
1 903 0000001F 01*(????????) vc_pos dd ?
1 904
1 905 00000023 01*(????????) tb_il dd ? ;ÄÄÄ tb 303 ÄÄÄ
1 906 00000027 01*(????????) tb_uc dd ?
1 907 0000002B 01*(????????) tb_saw dd ?
1 908 0000002F 01*(????????) tb_env dd ?
1 909 00000033 01*(????????) tb_reso dd ?
1 910 00000037 01*(????????) tb_len dd ?
1 911 0000003B 01*(????????) tb_sqpos dd ?
1 912
Turbo Assembler Version 4.1 04/18/00 15:43:11 Page 17
stub.asm
1 913 0000003F 01*(????????) ch_i1 dd ? ;ÄÄÄ closed hihat ÄÄÄ
1 914 00000043 01*(????????) ch_i2 dd ?
1 915 00000047 01*(????????) ch_env dd ?