Changeset 84c0125 in buchla-68k
- Timestamp:
- 08/07/2017 01:05:57 PM (7 years ago)
- Branches:
- master
- Children:
- 8325447
- Parents:
- 15854f1
- Files:
-
- 24 edited
Legend:
- Unmodified
- Added
- Removed
-
lib700/blkfill.s
r15854f1 r84c0125 5 5 | void 6 6 | blkfill(where, what, count) 7 | char |where;7 | char *where; 8 8 | char what; 9 9 | short count; -
lib700/blkmove.s
r15854f1 r84c0125 5 5 | void 6 6 | blkmove(to, from, n) 7 | char |to, |from;7 | char *to, *from; 8 8 | short n; 9 9 -
lib700/rand24.s
r15854f1 r84c0125 13 13 14 14 | Computes: 15 | S = [S |C] + K15 | S = [S * C] + K 16 16 17 17 | Where: -
prolog/fsmain.s
r15854f1 r84c0125 103 103 .page 104 104 105 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||105 |************************************************************************ 106 106 | Data Area | 107 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||107 |************************************************************************ 108 108 109 109 .data … … 111 111 pmsg1: .asciz " returned from Croot() " 112 112 113 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||113 |************************************************************************ 114 114 | BSS Area | 115 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||115 |************************************************************************ 116 116 117 117 .bss -
ram/execkey.s
r15854f1 r84c0125 38 38 | Register variables 39 39 | ------------------ 40 A_FP = A5 | LONG -- struct idfnhdr |40 A_FP = A5 | LONG -- struct idfnhdr * 41 41 A_FPU = A4 | LONG -- FPU base address 42 A_SMP = A3 | LONG -- struct sment |42 A_SMP = A3 | LONG -- struct sment * 43 43 44 44 R_FPMANT = D7 | WORD -- FPU time mantissa … … 50 50 | Local (stack) variables 51 51 | ----------------------- 52 PT = -4 | LONG -- instpnt |53 VEP = -8 | LONG -- struct valent |52 PT = -4 | LONG -- instpnt * 53 VEP = -8 | LONG -- struct valent * 54 54 OLDI = -10 | WORD -- old IPL (sr) 55 55 OCTYPE = -12 | WORD -- oscillator 1 mode / scratch … … 61 61 TFPVAL = -24 | WORD -- temporary FPU value 62 62 LTMP = -28 | LONG -- long temporary 63 IP = -32 | LONG -- struct instdef |63 IP = -32 | LONG -- struct instdef * 64 64 GROUP = -34 | WORD -- group number << 4 65 65 … … 200 200 move.l 4(A_SMP),4(A0) 201 201 202 | smp->prv = (struct sment |)vep;202 | smp->prv = (struct sment *)vep; 203 203 204 204 move.l VEP(A6),4(A_SMP) … … 460 460 .page 461 461 462 | ltmp = (ltmp |pt->ipvmlt) >> 15;462 | ltmp = (ltmp * pt->ipvmlt) >> 15; 463 463 464 464 F00L137: move.l PT(A6),A0 … … 794 794 move.l 4(A_SMP),4(A0) 795 795 796 | smp->prv = (struct sment |)vep;796 | smp->prv = (struct sment *)vep; 797 797 798 798 move.l VEP(A6),4(A_SMP) … … 1054 1054 .page 1055 1055 1056 | ltmp = (ltmp |pt->ipvmlt) >> 15;1056 | ltmp = (ltmp * pt->ipvmlt) >> 15; 1057 1057 1058 1058 F01L137: move.l PT(A6),A0 … … 1343 1343 move.l 4(A_SMP),4(A0) 1344 1344 1345 | smp->prv = (struct sment |)vep;1345 | smp->prv = (struct sment *)vep; 1346 1346 1347 1347 move.l VEP(A6),4(A_SMP) … … 1603 1603 .page 1604 1604 1605 | ltmp = (ltmp |pt->ipvmlt) >> 15;1605 | ltmp = (ltmp * pt->ipvmlt) >> 15; 1606 1606 1607 1607 F02L137: move.l PT(A6),A0 … … 1892 1892 move.l 4(A_SMP),4(A0) 1893 1893 1894 | smp->prv = (struct sment |)vep;1894 | smp->prv = (struct sment *)vep; 1895 1895 1896 1896 move.l VEP(A6),4(A_SMP) … … 2152 2152 .page 2153 2153 2154 | ltmp = (ltmp |pt->ipvmlt) >> 15;2154 | ltmp = (ltmp * pt->ipvmlt) >> 15; 2155 2155 2156 2156 F03L137: move.l PT(A6),A0 … … 2468 2468 move.l 4(A_SMP),4(A0) 2469 2469 2470 | smp->prv = (struct sment |)vep;2470 | smp->prv = (struct sment *)vep; 2471 2471 2472 2472 move.l VEP(A6),4(A_SMP) … … 2747 2747 .page 2748 2748 2749 | ltmp = (ltmp |pt->ipvmlt) >> 15;2749 | ltmp = (ltmp * pt->ipvmlt) >> 15; 2750 2750 2751 2751 F04L137: move.l PT(A6),A0 … … 3055 3055 move.l 4(A_SMP),4(A0) 3056 3056 3057 | smp->prv = (struct sment |)vep;3057 | smp->prv = (struct sment *)vep; 3058 3058 3059 3059 move.l VEP(A6),4(A_SMP) … … 3305 3305 .page 3306 3306 3307 | ltmp = (ltmp |pt->ipvmlt) >> 15;3307 | ltmp = (ltmp * pt->ipvmlt) >> 15; 3308 3308 3309 3309 F05L137: move.l PT(A6),A0 … … 3614 3614 move.l 4(A_SMP),4(A0) 3615 3615 3616 | smp->prv = (struct sment |)vep;3616 | smp->prv = (struct sment *)vep; 3617 3617 3618 3618 move.l VEP(A6),4(A_SMP) … … 3864 3864 .page 3865 3865 3866 | ltmp = (ltmp |pt->ipvmlt) >> 15;3866 | ltmp = (ltmp * pt->ipvmlt) >> 15; 3867 3867 3868 3868 F06L137: move.l PT(A6),A0 … … 4139 4139 move.l 4(A_SMP),4(A0) 4140 4140 4141 | smp->prv = (struct sment |)vep;4141 | smp->prv = (struct sment *)vep; 4142 4142 4143 4143 move.l VEP(A6),4(A_SMP) … … 4389 4389 .page 4390 4390 4391 | ltmp = (ltmp |pt->ipvmlt) >> 15;4391 | ltmp = (ltmp * pt->ipvmlt) >> 15; 4392 4392 4393 4393 F07L137: move.l PT(A6),A0 … … 4664 4664 move.l 4(A_SMP),4(A0) 4665 4665 4666 | smp->prv = (struct sment |)vep;4666 | smp->prv = (struct sment *)vep; 4667 4667 4668 4668 move.l VEP(A6),4(A_SMP) … … 4914 4914 .page 4915 4915 4916 | ltmp = (ltmp |pt->ipvmlt) >> 15;4916 | ltmp = (ltmp * pt->ipvmlt) >> 15; 4917 4917 4918 4918 F08L137: move.l PT(A6),A0 … … 5189 5189 move.l 4(A_SMP),4(A0) 5190 5190 5191 | smp->prv = (struct sment |)vep;5191 | smp->prv = (struct sment *)vep; 5192 5192 5193 5193 move.l VEP(A6),4(A_SMP) … … 5439 5439 .page 5440 5440 5441 | ltmp = (ltmp |pt->ipvmlt) >> 15;5441 | ltmp = (ltmp * pt->ipvmlt) >> 15; 5442 5442 5443 5443 F09L137: move.l PT(A6),A0 … … 5714 5714 move.l 4(A_SMP),4(A0) 5715 5715 5716 | smp->prv = (struct sment |)vep;5716 | smp->prv = (struct sment *)vep; 5717 5717 5718 5718 move.l VEP(A6),4(A_SMP) … … 5964 5964 .page 5965 5965 5966 | ltmp = (ltmp |pt->ipvmlt) >> 15;5966 | ltmp = (ltmp * pt->ipvmlt) >> 15; 5967 5967 5968 5968 F10L137: move.l PT(A6),A0 … … 6239 6239 move.l 4(A_SMP),4(A0) 6240 6240 6241 | smp->prv = (struct sment |)vep;6241 | smp->prv = (struct sment *)vep; 6242 6242 6243 6243 move.l VEP(A6),4(A_SMP) … … 6489 6489 .page 6490 6490 6491 | ltmp = (ltmp |pt->ipvmlt) >> 15;6491 | ltmp = (ltmp * pt->ipvmlt) >> 15; 6492 6492 6493 6493 F11L137: move.l PT(A6),A0 … … 6764 6764 move.l 4(A_SMP),4(A0) 6765 6765 6766 | smp->prv = (struct sment |)vep;6766 | smp->prv = (struct sment *)vep; 6767 6767 6768 6768 move.l VEP(A6),4(A_SMP) … … 7014 7014 .page 7015 7015 7016 | ltmp = (ltmp |pt->ipvmlt) >> 15;7016 | ltmp = (ltmp * pt->ipvmlt) >> 15; 7017 7017 7018 7018 F12L137: move.l PT(A6),A0 -
ram/sedisp.s
r15854f1 r84c0125 4 4 5 5 | se_disp(ep, sd, gdstb, cf) 6 | struct s_entry |ep;6 | struct s_entry *ep; 7 7 | short sd; 8 | struct gdsel |gdstb[];8 | struct gdsel *gdstb[]; 9 9 | short cf; 10 10 … … 111 111 | gdsel structure definitions 112 112 | --------------------------- 113 G_NEXT = 0 | long - 'next' field (struct gdsel |)113 G_NEXT = 0 | long - 'next' field (struct gdsel *) 114 114 G_NOTE = 4 | word - 'note' field (short) 115 115 G_CODE = 6 | word - 'code' field (short) … … 206 206 clr.b numstr+3 | terminate string 207 207 move.w d1,d0 | col = group 208 asl.w #2,d0 | ... |5208 asl.w #2,d0 | ... * 5 209 209 add.w d1,d0 | ... 210 210 add.w #6,d0 | ... + 6 … … 251 251 clr.w d2 | d2 = ep->group 252 252 move.b E_GROUP(a0),d2 | ... 253 lsl.w #2,d2 | ... |4253 lsl.w #2,d2 | ... * 4 254 254 movea.l P_SL(a6),a2 | a2 points at gdstb 255 255 move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[ep->group] … … 304 304 clr.w d2 | get group in d2 305 305 move.b E_GROUP(a0),d2 | ... 306 lsl.w #2,d2 | ... |4306 lsl.w #2,d2 | ... * 4 307 307 move.l 0(a2,d2.W),d0 | check gdstb[ep->group] 308 308 beq dsexit … … 353 353 movea.l d0,a1 | a1 = gdsp 354 354 move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next 355 move.w #48,d2 | d2 = event PRIORITY |4355 move.w #48,d2 | d2 = event PRIORITY * 4 356 356 movea.l P_SL(a6),a2 | a2 points at gdstb 357 357 move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri] … … 376 376 movea.l d0,a1 | a1 = gdsp 377 377 move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next 378 move.w #48,d2 | d2 = event PRIORITY |4378 move.w #48,d2 | d2 = event PRIORITY * 4 379 379 movea.l P_SL(a6),a2 | a2 points at gdstb 380 380 move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri] … … 394 394 movea.l d0,a1 | a1 = gdsp 395 395 move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next 396 move.w #48,d2 | d2 = event PRIORITY |4396 move.w #48,d2 | d2 = event PRIORITY * 4 397 397 movea.l P_SL(a6),a2 | a2 points at gdstb 398 398 move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri] … … 428 428 movea.l d0,a1 | a1 = gdsp 429 429 move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next 430 move.w #52,d2 | d2 = event PRIORITY |4430 move.w #52,d2 | d2 = event PRIORITY * 4 431 431 movea.l P_SL(a6),a2 | a2 points at gdstb 432 432 move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri] … … 491 491 move.w d1,-(a7) | save group number on stack 492 492 add.w d0,d0 | calculate column 493 add.w d0,d1 | ... = 5 |group493 add.w d0,d1 | ... = 5 * group 494 494 addi.w #5,d1 | ... + 5 495 495 move.w #AT11,-(a7) | vputs(obj8, 3, col, numstr, atr11) … … 519 519 movea.l d0,a1 | a1 = gdsp 520 520 move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next 521 move.w #52,d2 | d2 = event PRIORITY |4521 move.w #52,d2 | d2 = event PRIORITY * 4 522 522 movea.l P_SL(a6),a2 | a2 points at gdstb 523 523 move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri] … … 548 548 move.w d1,-(a7) | save group number 549 549 move.w (a7),d0 | col = group number 550 add.w d0,d0 | ... |5550 add.w d0,d0 | ... * 5 551 551 add.w d0,d0 | ... 552 552 move.w (a7)+,d2 | ... (d2 = group number) … … 583 583 movea.l d0,a1 | a1 = gdsp 584 584 move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next 585 move.w #52,d2 | d2 = event PRIORITY |4585 move.w #52,d2 | d2 = event PRIORITY * 4 586 586 movea.l P_SL(a6),a2 | a2 points at gdstb 587 587 move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri] … … 612 612 move.w d1,-(a7) | save group number 613 613 move.w (a7),d0 | col = group number 614 add.w d0,d0 | ... |5614 add.w d0,d0 | ... * 5 615 615 add.w d0,d0 | ... 616 616 move.w (a7)+,d2 | ... (d2 = group number) … … 647 647 movea.l d0,a1 | a1 = gdsp 648 648 move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next 649 move.w #52,d2 | d2 = event PRIORITY |4649 move.w #52,d2 | d2 = event PRIORITY * 4 650 650 movea.l P_SL(a6),a2 | a2 points at gdstb 651 651 move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri] … … 683 683 move.w d1,-(a7) | save variable number 684 684 move.w d1,d0 | calculate display offset 685 lsl.w #3,d0 | ... (var |9) + 6685 lsl.w #3,d0 | ... (var * 9) + 6 686 686 add.w d0,d1 | ... in d1 687 687 addq.w #6,d1 | ... … … 707 707 movea.l d0,a1 | a1 = gdsp 708 708 move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next 709 move.w #52,d2 | d2 = event PRIORITY |4709 move.w #52,d2 | d2 = event PRIORITY * 4 710 710 movea.l P_SL(a6),a2 | a2 points at gdstb 711 711 move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri] … … 743 743 move.w d1,-(a7) | save variable number 744 744 move.w d1,d0 | calculate display offset 745 lsl.w #3,d0 | ... (var |9) + 8745 lsl.w #3,d0 | ... (var * 9) + 8 746 746 add.w d0,d1 | ... in d1 747 747 addi.w #8,d1 | ... … … 791 791 movea.l d0,a1 | a1 = gdsp 792 792 move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next 793 move.w #52,d2 | d2 = event PRIORITY |4793 move.w #52,d2 | d2 = event PRIORITY * 4 794 794 movea.l P_SL(a6),a2 | a2 points at gdstb 795 795 move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri] … … 834 834 movea.l d0,a1 | a1 = gdsp 835 835 move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next 836 move.w #56,d2 | d2 = event PRIORITY |4836 move.w #56,d2 | d2 = event PRIORITY * 4 837 837 movea.l P_SL(a6),a2 | a2 points at gdstb 838 838 move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri] … … 880 880 movea.l d0,a1 | a1 = gdsp 881 881 move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next 882 move.w #56,d2 | d2 = event PRIORITY |4882 move.w #56,d2 | d2 = event PRIORITY * 4 883 883 movea.l P_SL(a6),a2 | a2 points at gdstb 884 884 move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri] … … 918 918 movea.l d0,a1 | a1 = gdsp 919 919 move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next 920 move.w #56,d2 | d2 = event PRIORITY |4920 move.w #56,d2 | d2 = event PRIORITY * 4 921 921 movea.l P_SL(a6),a2 | a2 points at gdstb 922 922 move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri] … … 955 955 movea.l d0,a1 | a1 = gdsp 956 956 move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next 957 move.w #56,d2 | d2 = event PRIORITY |4957 move.w #56,d2 | d2 = event PRIORITY * 4 958 958 movea.l P_SL(a6),a2 | a2 points at gdstb 959 959 move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri] … … 978 978 movea.l d0,a1 | a1 = gdsp 979 979 move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next 980 move.w #60,d2 | d2 = event PRIORITY |4980 move.w #60,d2 | d2 = event PRIORITY * 4 981 981 movea.l P_SL(a6),a2 | a2 points at gdstb 982 982 move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri] … … 1008 1008 move.w d1,-(a7) | save group number 1009 1009 move.w (a7),d0 | col = group number 1010 add.w d0,d0 | ... |51010 add.w d0,d0 | ... * 5 1011 1011 add.w d0,d0 | ... 1012 1012 move.w (a7)+,d2 | ... (d2 = group number) … … 1050 1050 movea.l d0,a1 | a1 = gdsp 1051 1051 move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next 1052 move.w #60,d2 | d2 = event PRIORITY |41052 move.w #60,d2 | d2 = event PRIORITY * 4 1053 1053 movea.l P_SL(a6),a2 | a2 points at gdstb 1054 1054 move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri] … … 1100 1100 movea.l d0,a1 | a1 = gdsp 1101 1101 move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next 1102 move.w #60,d2 | d2 = event PRIORITY |41102 move.w #60,d2 | d2 = event PRIORITY * 4 1103 1103 movea.l P_SL(a6),a2 | a2 points at gdstb 1104 1104 move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri] … … 1150 1150 movea.l d0,a1 | a1 = gdsp 1151 1151 move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next 1152 move.w #60,d2 | d2 = event PRIORITY |41152 move.w #60,d2 | d2 = event PRIORITY * 4 1153 1153 movea.l P_SL(a6),a2 | a2 points at gdstb 1154 1154 move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri] -
ram/seexec.s
r15854f1 r84c0125 3 3 | Version 40 -- 1988-10-06 -- D.N. Lynx Crowe 4 4 5 | struct s_entry |5 | struct s_entry * 6 6 | se_exec(ep, sd) 7 | struct s_entry |ep;7 | struct s_entry *ep; 8 8 | short sd; 9 9 … … 143 143 nbegex: clr.w d1 | clear d1 144 144 move.b E_GROUP(a0),d1 | get group number 145 add.w d1,d1 | ... |2145 add.w d1,d1 | ... * 2 146 146 lea _grpstat,a1 | point at grpstat 147 147 tst.w 0(a1,d1.W) | see if group is enabled … … 181 181 nendex: clr.w d1 | clear d1 182 182 move.b E_GROUP(a0),d1 | get group number 183 add.w d1,d1 | ... |2183 add.w d1,d1 | ... * 2 184 184 lea _grpstat,a1 | point at grpstat 185 185 tst.w 0(a1,d1.W) | check group status … … 188 188 move.b E_NOTE(a0),d1 | d1 = note number nn (0..127) 189 189 move.w #LCL_PCH,d2 | put port and channel in d2 190 add.w d1,d2 | d2 = trg |2190 add.w d1,d2 | d2 = trg * 2 191 191 add.w d2,d2 | ... 192 192 lea _trgtab,a1 | set trigger table entry off -
ram/serintr.s
r15854f1 r84c0125 166 166 167 167 calldcd1: move.w d0,-(a7) | Call the footswitch processor 168 jsr (a2) | ... ( |footX)(status)168 jsr (a2) | ... (*footX)(status) 169 169 tst.w (a7)+ | ... 170 170 rts | Return to caller … … 524 524 | DCD interrupt processor vectors 525 525 | ------------------------------- 526 _foot1: .ds.l 1 | short ( |foot1)();527 _foot2: .ds.l 1 | short ( |foot2)();528 _pulse1: .ds.l 1 | short ( |pulse1)();529 _pulse2: .ds.l 1 | short ( |pulse2)();526 _foot1: .ds.l 1 | short (*foot1)(); 527 _foot2: .ds.l 1 | short (*foot2)(); 528 _pulse1: .ds.l 1 | short (*pulse1)(); 529 _pulse2: .ds.l 1 | short (*pulse2)(); 530 530 531 531 .end -
rom/bios.s
r15854f1 r84c0125 1 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||2 | |3 | bios.s -- BIOS for the Buchla 700 and NASA 3D Helmet Display |4 | ------ -------------------------------------------------- |5 | |6 | See VM1,VM2 and VDATE for version and date |7 | Written by D.N. Lynx Crowe |8 | |9 | Very loosely based on ideas from: |10 | |11 | "Atari ST Internals", by Abacus Software, |12 | "A Hitchhiker's Guide to the BIOS", by Atari, |13 | "DOS Technical Reference", by IBM, |1 |******************************************************************************* 2 | * 3 | bios.s -- BIOS for the Buchla 700 and NASA 3D Helmet Display * 4 | ------ -------------------------------------------------- * 5 | * 6 | See VM1,VM2 and VDATE for version and date * 7 | Written by D.N. Lynx Crowe * 8 | * 9 | Very loosely based on ideas from: * 10 | * 11 | "Atari ST Internals", by Abacus Software, * 12 | "A Hitchhiker's Guide to the BIOS", by Atari, * 13 | "DOS Technical Reference", by IBM, * 14 14 | "DOS/360", by IBM, 15 | "CP/M" , by Digital Research, and, of course, |16 | "Unix (tm)", by AT&T, et al. |17 | |18 | After all, Why re-invent the wheel? |19 | |20 | Some of the functions are the same as Ataris, but quite a few are different, |21 | and our I/O configuration is much different, so BEWARE! Make no |22 | assumptions, and read the documentation and comments very carefully. |23 | |24 | Especially watch out for the extended BIOS functions. Most of them |25 | are nothing at all like the Atari / GEMDOS extended bios functions, |26 | and even the ones that are similar have different numbers. |27 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||15 | "CP/M" , by Digital Research, and, of course, * 16 | "Unix (tm)", by AT&T, et al. * 17 | * 18 | After all, Why re-invent the wheel? * 19 | * 20 | Some of the functions are the same as Ataris, but quite a few are different, * 21 | and our I/O configuration is much different, so BEWARE! Make no * 22 | assumptions, and read the documentation and comments very carefully. * 23 | * 24 | Especially watch out for the extended BIOS functions. Most of them * 25 | are nothing at all like the Atari / GEMDOS extended bios functions, * 26 | and even the ones that are similar have different numbers. * 27 |******************************************************************************* 28 28 29 29 .text … … 39 39 40 40 FL_SKR = 0x00 | Seek rate (WD1772, 6Ms/step) 41 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||41 |************************************************************************ 42 42 43 43 .page … … 1595 1595 fastcopy: move.l 4(a7),a0 | Get source pointer 1596 1596 move.l 8(a7),a1 | Get destination pointer 1597 move.w 0x3F,d0 | 512 bytes (63+1) |81597 move.w 0x3F,d0 | 512 bytes (63+1)*8 1598 1598 1599 1599 fastcpy1: move.b (a0)+,(a1)+ | Move 8 bytes … … 1615 1615 _hdvini: link a6,#-18 | Reserve space on stack 1616 1616 movem.l d3-d7/a3-a5,-(a7) | Preserve registers 1617 move.l #300,maxactim | maxactim = 300 |20ms1617 move.l #300,maxactim | maxactim = 300 * 20ms 1618 1618 clr.w d0 | Put zeros in ... 1619 1619 move.w d0,nflops | ... nflops … … 1759 1759 move.w d0,24(a5) | Set dspt 1760 1760 move.w 20(a5),d0 | Get dnsides 1761 muls.w 24(a5),d0 | ... |dspt1761 muls.w 24(a5),d0 | ... * dspt 1762 1762 move.w d0,22(a5) | Set dspc 1763 1763 move.l #buffer+28,(a7) | Convert number of hidden sects … … 1839 1839 media4: move.l _hz_200,d0 | Get time in d0 1840 1840 movea.w d7,a1 | Calculate acctim table address 1841 add.l a1,a1 | ... = drive # |41841 add.l a1,a1 | ... = drive # * 4 1842 1842 add.l a1,a1 | ... 1843 1843 add.l #acctim,a1 | ... + acctim base address … … 1987 1987 movem.l d2-d7/a5,-(a7) | Save registers 1988 1988 move.w 16(a6),d0 | Drive number to d0 1989 asl.w #5,d0 | Shift ( |32 )1989 asl.w #5,d0 | Shift ( *32 ) 1990 1990 ext.l d0 | Sign extend it, too 1991 1991 move.l d0,a5 | Result in a5 … … 2688 2688 floplk01: moveq.l #0,d7 | Clear out d7 2689 2689 move.w ccount(a5),d7 | Get ccount 2690 lsl.w #8,d7 | ... |sector length (512)2690 lsl.w #8,d7 | ... * sector length (512) 2691 2691 lsl.w #1,d7 | ... 2692 2692 move.l cdma(a5),a0 | Get DMA start address … … 3309 3309 3310 3310 .page 3311 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||3311 |************************************************************************ 3312 3312 | | 3313 3313 | Constant definitions | 3314 3314 | -------------------- | 3315 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||3315 |************************************************************************ 3316 3316 3317 3317 .even … … 3658 3658 3659 3659 .page 3660 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||3660 |************************************************************************ 3661 3661 | | 3662 3662 | RAM storage definitions | 3663 3663 | ----------------------- | 3664 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||3664 |************************************************************************ 3665 3665 3666 3666 .bss … … 3736 3736 rsarea: .ds.l 1 | Dummy long word at top of save area 3737 3737 3738 | ||||| end of the permanently assigned bios variables |||||3738 | ***** end of the permanently assigned bios variables ***** 3739 3739 3740 3740 .page -
vlib/glcplot.s
r15854f1 r84c0125 28 28 29 29 _GLCplot: link a6,#0 | Link stack frames 30 moveq #63,d0 | d0 = (63-y) |8530 moveq #63,d0 | d0 = (63-y) * 85 31 31 sub.w YLOC(a6),d0 | ... 32 32 mulu #85,d0 | ... … … 34 34 move.w XLOC(a6),d1 | ... 35 35 divu #6,d1 | ... 36 add.w d1,d0 | d0 = (63-y) |85 + (x/6)36 add.w d1,d0 | d0 = (63-y)*85 + (x/6) 37 37 swap d1 | d2 = 7 - (x%6) % 8 38 38 moveq #7,d2 | ... -
vlib/tsplot4.s
r15854f1 r84c0125 7 7 8 8 | tsplot4(obase, nw, fg, row, col, str. pitch) 9 | int |obase, nw, fg, row, col, pitch;10 | char |str;9 | int *obase, nw, fg, row, col, pitch; 10 | char *str; 11 11 12 12 | Outputs characters from the string at 'str' to an 'nw' … … 77 77 move.w ROW(a6),d0 | Calculate output address 78 78 move.w PITCH(a6),d1 | ... PITCH 79 mulu d1,d0 | ... |ROW79 mulu d1,d0 | ... * ROW 80 80 add.w #VPIX-1,d0 | ... + VPIX-1 81 mulu d5,d0 | ... |NW81 mulu d5,d0 | ... * NW 82 82 clr.l d1 | ... 83 83 move.w COL(a6),d1 | ... + 84 lsl.w #2,d1 | ... COL |484 lsl.w #2,d1 | ... COL * 4 85 85 add.l d1,d0 | ... 86 86 add.l OBASE(a6),d0 | ... + OBASE … … 95 95 adda.l #HCW,a3 | Update output pointer for next char. 96 96 lea _cgtable,a0 | Establish CG pointer in a0 97 lsl.w #1,d0 | ... 2 |character97 lsl.w #1,d0 | ... 2 * character 98 98 adda.w d0,a0 | ... + _cgtable address 99 99 move.w #VPIX-1,d6 | Set scan line counter in d6 -
vlib/vclrav.s
r15854f1 r84c0125 6 6 7 7 | vclrav(adr, row, col, atr, len) 8 | unsigned int |adr, row, col, atr, len;8 | unsigned int *adr, row, col, atr, len; 9 9 10 10 | Clears attribute 'atr' at ('row', 'col') in the … … 28 28 move.w P_COL(a6),d1 | Get col 29 29 add.l d1,d0 | Add col into d0 to get char. # 30 move.l d0,d1 | Develop cw = (cn/2) |6 in d130 move.l d0,d1 | Develop cw = (cn/2)*6 in d1 31 31 andi.l #0xFFFFFFFE,d1 | ... 32 32 move.l d1,d2 | ... -
vlib/vcputs.s
r15854f1 r84c0125 6 6 7 7 | vcputs(obase, nw, fg, bg, row, col, str) 8 | int |obase, nw, fg, bg, row, col;9 | char |str;8 | int *obase, nw, fg, bg, row, col; 9 | char *str; 10 10 11 11 | Outputs characters from the string at 'str' to an 'nw' … … 73 73 move.w ROW(a6),d0 | Calculate output address 74 74 move.w #VPIX,d1 | ... VPIX 75 mulu d1,d0 | ... |ROW75 mulu d1,d0 | ... * ROW 76 76 add.w #VPIX-1,d0 | ... + VPIX-1 77 mulu d5,d0 | ... |NW77 mulu d5,d0 | ... * NW 78 78 clr.l d1 | ... 79 79 move.w COL(a6),d1 | ... + 80 lsl.w #2,d1 | ... COL |480 lsl.w #2,d1 | ... COL * 4 81 81 add.l d1,d0 | ... 82 82 add.l OBASE(a6),d0 | ... + OBASE … … 91 91 adda.l #HCW,a3 | Update output pointer for next char. 92 92 lea _cgtable,a0 | Establish CG pointer in a0 93 lsl.w #1,d0 | ... 2 |character93 lsl.w #1,d0 | ... 2 * character 94 94 adda.w d0,a0 | ... + _cgtable address 95 95 move.w #VPIX-1,d6 | Set scan line counter in d6 -
vlib/vcputsv.s
r15854f1 r84c0125 7 7 8 8 | vcputsv(obase, nw, fg, bg, row, col, str. pitch) 9 | int |obase, nw, fg, bg, row, col, pitch;10 | char |str;9 | int *obase, nw, fg, bg, row, col, pitch; 10 | char *str; 11 11 12 12 | Outputs characters from the string at 'str' to an 'nw' … … 80 80 move.w ROW(a6),d0 | Calculate output address 81 81 move.w PITCH(a6),d1 | ... PITCH 82 mulu d1,d0 | ... |ROW82 mulu d1,d0 | ... * ROW 83 83 add.w #VPIX-1,d0 | ... + VPIX-1 84 mulu d5,d0 | ... |NW84 mulu d5,d0 | ... * NW 85 85 clr.l d1 | ... 86 86 move.w COL(a6),d1 | ... + 87 lsl.w #2,d1 | ... COL |487 lsl.w #2,d1 | ... COL * 4 88 88 add.l d1,d0 | ... 89 89 add.l OBASE(a6),d0 | ... + OBASE … … 98 98 adda.l #HCW,a3 | Update output pointer for next char. 99 99 lea _cgtable,a0 | Establish CG pointer in a0 100 lsl.w #1,d0 | ... 2 |character100 lsl.w #1,d0 | ... 2 * character 101 101 adda.w d0,a0 | ... + _cgtable address 102 102 move.w #VPIX-1,d6 | Set scan line counter in d6 -
vlib/vputa.s
r15854f1 r84c0125 6 6 7 7 | vputa(sbase, row, col, attrib) 8 | unsigned int |sbase, row, col, attrib;8 | unsigned int *sbase, row, col, attrib; 9 9 10 10 | Stores attribute value 'attrib' for the character … … 28 28 andi.l #0x0000003F,d1 | Mask down to 6 bits 29 29 or.l d1,d0 | OR into d0 to get char. # 30 move.w d0,d1 | Develop cw = (cn/2) |6 in d130 move.w d0,d1 | Develop cw = (cn/2)*6 in d1 31 31 andi.l #0xFFFFFFFE,d1 | ... 32 32 move.l d1,d2 | ... -
vlib/vputc.s
r15854f1 r84c0125 6 6 7 7 | vputc(sbase, row, col, c, attrib) 8 | unsigned int |sbase, row, col, c, attrib;8 | unsigned int *sbase, row, col, c, attrib; 9 9 10 10 | Stores character c at (row,col) in sbase with … … 23 23 andi.l #0x0000003F,d1 | Mask down to 6 bits 24 24 or.l d1,d0 | OR into d0 to get char. # 25 move.w d0,d1 | Develop cw = (cn/2) |6 in d125 move.w d0,d1 | Develop cw = (cn/2)*6 in d1 26 26 andi.l #0xFFFFFFFE,d1 | ... 27 27 move.l d1,d2 | ... -
vlib/vputcv.s
r15854f1 r84c0125 6 6 7 7 | vputcv(adr, row, col, chr, atr, cols) 8 | unsigned int |adr, row, col, chr, atr, cols;8 | unsigned int *adr, row, col, chr, atr, cols; 9 9 10 10 | Stores character 'chr' at ('row', 'col') in the … … 32 32 move.w P_COL(a6),d1 | Get col 33 33 add.l d1,d0 | Add col into d0 to get char. # 34 move.l d0,d1 | Develop cw = (cn/2) |6 in d134 move.l d0,d1 | Develop cw = (cn/2)*6 in d1 35 35 andi.l #0xFFFFFFFE,d1 | ... 36 36 move.l d1,d2 | ... -
vlib/vputp.s
r15854f1 r84c0125 6 6 | int 7 7 | vputp(octad, xloc, yloc, val) 8 | struct octent |octad;8 | struct octent *octad; 9 9 | int xloc, yloc; 10 10 -
vlib/vsetav.s
r15854f1 r84c0125 6 6 7 7 | vsetav(adr, row, col, atr, len) 8 | unsigned int |adr, row, col, atr, len;8 | unsigned int *adr, row, col, atr, len; 9 9 10 10 | Sets attribute 'atr' at ('row', 'col') in the … … 28 28 move.w P_COL(a6),d1 | Get col 29 29 add.l d1,d0 | Add col into d0 to get char. # 30 move.l d0,d1 | Develop cw = (cn/2) |6 in d130 move.l d0,d1 | Develop cw = (cn/2)*6 in d1 31 31 andi.l #0xFFFFFFFE,d1 | ... 32 32 move.l d1,d2 | ... -
vlib/vsetcv.s
r15854f1 r84c0125 6 6 7 7 | vsetcv(adr, row, col, cfb, len) 8 | unsigned int |adr, row, col, cfb, len;8 | unsigned int *adr, row, col, cfb, len; 9 9 10 10 | Sets colors 'cfb' at ('row', 'col') in the … … 28 28 move.w P_COL(a6),d1 | Get col 29 29 add.l d1,d0 | Add col into d0 to get char. # 30 move.l d0,d1 | Develop cw = (cn/2) |6 in d130 move.l d0,d1 | Develop cw = (cn/2)*6 in d1 31 31 andi.l #0xFFFFFFFE,d1 | ... 32 32 move.l d1,d2 | ... -
vlib/vsplot4.s
r15854f1 r84c0125 7 7 8 8 | vsplot4(obase, nw, fg, row, col, str, pitch, ht, cgtab) 9 | uint |obase, nw, fg, row, col, pitch, ht, cgtab[][256];10 | char |str;9 | uint *obase, nw, fg, row, col, pitch, ht, cgtab[][256]; 10 | char *str; 11 11 12 12 | Outputs characters from the string at 'str' to an 'nw' … … 78 78 move.w ROW(a6),d0 | Calculate output address 79 79 move.w PITCH(a6),d1 | ... PITCH 80 mulu d1,d0 | ... |ROW80 mulu d1,d0 | ... * ROW 81 81 add.w HT(a6),d0 | ... + HT-1 82 82 subq.w #1,d0 | ... 83 mulu d5,d0 | ... |NW83 mulu d5,d0 | ... * NW 84 84 clr.l d1 | ... 85 85 move.w COL(a6),d1 | ... + 86 lsl.w #2,d1 | ... COL |486 lsl.w #2,d1 | ... COL * 4 87 87 add.l d1,d0 | ... 88 88 add.l OBASE(a6),d0 | ... + OBASE … … 97 97 adda.l #HCW,a3 | Update output pointer for next char. 98 98 movea.l CGTAB(a6),a0 | Establish CG pointer in a0 99 lsl.w #1,d0 | ... 2 |character99 lsl.w #1,d0 | ... 2 * character 100 100 adda.w d0,a0 | ... + cgtab address 101 101 move.w HT(a6),d6 | Set scan line counter in d6 -
vlib/vvputsv.s
r15854f1 r84c0125 7 7 8 8 | vvputsv(obase, nw, fg, bg, row, col, str, pitch, ht, cgtab) 9 | uint |obase, nw, fg, bg, row, col, pitch, ht, cgtab[][256];10 | char |str;9 | uint *obase, nw, fg, bg, row, col, pitch, ht, cgtab[][256]; 10 | char *str; 11 11 12 12 | Outputs characters from the string at 'str' to an 'nw' … … 79 79 move.w ROW(a6),d0 | Calculate output address 80 80 move.w PITCH(a6),d1 | ... PITCH 81 mulu d1,d0 | ... |ROW81 mulu d1,d0 | ... * ROW 82 82 add.w HT(a6),d0 | ... + HT-1 83 83 subq.w #1,d0 | ... 84 mulu d5,d0 | ... |NW84 mulu d5,d0 | ... * NW 85 85 clr.l d1 | ... 86 86 move.w COL(a6),d1 | ... + 87 lsl.w #2,d1 | ... COL |487 lsl.w #2,d1 | ... COL * 4 88 88 add.l d1,d0 | ... 89 89 add.l OBASE(a6),d0 | ... + OBASE … … 98 98 adda.l #HCW,a3 | Update output pointer for next char. 99 99 movea.l CGTAB(a6),a0 | Establish CG pointer in a0 100 lsl.w #1,d0 | ... 2 |character100 lsl.w #1,d0 | ... 2 * character 101 101 adda.w d0,a0 | ... + cg table address 102 102 move.w HT(a6),d6 | Set scan line counter in d6 -
vlib/vwputp.s
r15854f1 r84c0125 6 6 | int 7 7 | vwputp(octad, xloc, yloc, val) 8 | struct octent |octad;8 | struct octent *octad; 9 9 | int xloc, yloc; 10 10 -
vlib/vwputs.s
r15854f1 r84c0125 6 6 7 7 | vwputs(obase, nw, fg, bg, row, col, str) 8 | int |obase, nw, fg, bg, row, col;9 | char |str;8 | int *obase, nw, fg, bg, row, col; 9 | char *str; 10 10 11 11 | Outputs characters from the string at 'str' to an 'nw' … … 67 67 move.w ROW(a6),d0 | Calculate output address 68 68 move.w #VPITCH,d1 | ... 69 mulu d1,d0 | ... ROW |VPITCH69 mulu d1,d0 | ... ROW * VPITCH 70 70 add.w #NVPIX-1,d0 | ... + NVPIX-1 71 mulu d5,d0 | ... |NW71 mulu d5,d0 | ... * NW 72 72 clr.l d1 | ... 73 move.w COL(a6),d1 | ... + (COL |2)73 move.w COL(a6),d1 | ... + (COL * 2) 74 74 lsl.l #1,d1 | ... 75 75 add.l d1,d0 | ... … … 86 86 adda.l #2,a3 | Update output pointer for next char. 87 87 lea _cgtable,a0 | Establish CG pointer in a0 88 lsl.w #1,d0 | ... 2 |character88 lsl.w #1,d0 | ... 2 * character 89 89 adda.w d0,a0 | ... + _cgtable address 90 90 move.w #NVPIX-1,d6 | Set scan line counter in d6
Note:
See TracChangeset
for help on using the changeset viewer.