Provided both algorithm and table
parent
509bb3d28d
commit
d96dd8765e
135
Home.md
135
Home.md
|
@ -8,9 +8,9 @@ Welcome to the AppleWin wiki!
|
|||
|
||||
Given:
|
||||
|
||||
y = abcd efgh
|
||||
y = abcd efgh (Range 0 .. 191 = $00 .. $BF)
|
||||
|
||||
Address is then:
|
||||
Address of the scanline is calculated via:
|
||||
|
||||
---- ---- abcd efgh INPUT: Y
|
||||
---- ---- ---- -fgh &7
|
||||
|
@ -30,7 +30,7 @@ Address is then:
|
|||
---- ---- ---a b--- y/64 * 8
|
||||
+ ---- ---- -aba b--- y/64*0x28 See Note for alt. * 0x28
|
||||
|
||||
-PP- ---- 0000 0000 Graphics page, $20 or $40
|
||||
0PP- ---- 0000 0000 Graphics page, $20 or $40
|
||||
|
||||
= 0PPf ghcd eaba b000 Address
|
||||
|
||||
|
@ -47,15 +47,130 @@ C code:
|
|||
6502 code:
|
||||
|
||||
```assembly
|
||||
ORG $900
|
||||
0900: B9 00 10 Y2HGRADR LDA YHgrLo, Y
|
||||
0903: 85 26 STA GBASL
|
||||
0905: B9 00 11 LDA YHgrHi, Y
|
||||
0908: 44 E6 ORA $E6
|
||||
090A: 85 27 STA GBASH
|
||||
090C: 60 RTS
|
||||
GBASL EQU $26
|
||||
GBASH EQU $27
|
||||
HPAG EQU $E6 ; Used by Applesoft, 20 HGR1, 40 HGR2
|
||||
|
||||
ORG $F417
|
||||
; Algorithm Y to HGR address
|
||||
; INPUT: A = row (0 .. 191)
|
||||
; The normal entry point is HPOSN $F411, A=row, Y,X=col
|
||||
; F411: STA $E2
|
||||
; F413: STX $E3
|
||||
; F415: STY $E1
|
||||
F417: Y2HGRAddr
|
||||
F417: 48 PHA ; Y = abcdefgh
|
||||
F418: 29 C0 AND #$C0 ; A = ab000000
|
||||
F41A: 85 26 STA GBASL ;
|
||||
F41C: 4A LSR ; A = 0ab00000
|
||||
F41D: 4A LSR ; A = 00ab0000
|
||||
F41E: 05 26 ORA GBASL ; = abab0000
|
||||
F420: 85 26 STA GBASL
|
||||
F422: 68 PLA ; C A GBASH GBASL
|
||||
F423: 85 27 STA GBASH ; ? abcdefgh abcdefgh abab0000
|
||||
F425: 0A ASL ; a bcdefgh0 abcdefgh abab0000
|
||||
F426: 0A ASL ; b cdefgh00 abcdefgh abab0000
|
||||
F427: 0A ASL ; c defgh000 abcdefgh abab0000
|
||||
F428: 26 27 ROL GBASH ; a defgh000 bcdefghc abab0000
|
||||
F42A: 0A ASL ; d efgh0000 bcdefghc abab0000
|
||||
F42B: 26 27 ROL GBASH ; b efgh0000 cdefghcd abab0000
|
||||
F42D: 0A ASL ; e fgh00000 cdefghcd abab0000
|
||||
F42E: 66 26 ROR GBASL ; 0 fgh00000 cdefghcd eabab000
|
||||
F430: A5 27 LDA GBASH ; 0 cdefghcd cdefghcd eabab000
|
||||
F432: 29 1F AND #$1F ; 0 000fghcd cdefghcd eabab000
|
||||
F434: 05 E6 ORA HPAG ; 0 pppfghcd cdefghcd eabab000
|
||||
F436: 85 27 STA GBASH ; 0 pppfghcd pppfghcd eabab000
|
||||
|
||||
y2hgrL EQU $1000
|
||||
y2hgrH EQU $1100
|
||||
|
||||
ORG $0900
|
||||
; Table Y to HGR address
|
||||
; INPUT: Y = row (0 .. 191)
|
||||
0900: B9 00 10 Y2HGRADR LDA y2hgrL, Y
|
||||
0903: 85 26 STA GBASL
|
||||
0905: B9 00 11 LDA y2hgrH, Y
|
||||
0908: 44 E6 ORA HPAG ; #$20 for HGR1, #$40 for HGR2
|
||||
090A: 85 27 STA GBASH
|
||||
090C: 60 RTS
|
||||
|
||||
ORG $1000
|
||||
1000: 00 00 00 00 00 00 00 00
|
||||
1008: 80 80 80 80 80 80 80 80
|
||||
1010: 00 00 00 00 00 00 00 00
|
||||
1018: 80 80 80 80 80 80 80 80
|
||||
1020: 00 00 00 00 00 00 00 00
|
||||
1028: 80 80 80 80 80 80 80 80
|
||||
1030: 00 00 00 00 00 00 00 00
|
||||
1038: 80 80 80 80 80 80 80 80
|
||||
1040: 28 28 28 28 28 28 28 28
|
||||
1048: A8 A8 A8 A8 A8 A8 A8 A8
|
||||
1050: 28 28 28 28 28 28 28 28
|
||||
1058: A8 A8 A8 A8 A8 A8 A8 A8
|
||||
1060: 28 28 28 28 28 28 28 28
|
||||
1068: A8 A8 A8 A8 A8 A8 A8 A8
|
||||
1070: 28 28 28 28 28 28 28 28
|
||||
1078: A8 A8 A8 A8 A8 A8 A8 A8
|
||||
1080: 50 50 50 50 50 50 50 50
|
||||
1088: D0 D0 D0 D0 D0 D0 D0 D0
|
||||
1090: 50 50 50 50 50 50 50 50
|
||||
1098: D0 D0 D0 D0 D0 D0 D0 D0
|
||||
10A0: 50 50 50 50 50 50 50 50
|
||||
10A8: D0 D0 D0 D0 D0 D0 D0 D0
|
||||
10B0: 50 50 50 50 50 50 50 50
|
||||
10B8: D0 D0 D0 D0 D0 D0 D0 D0
|
||||
|
||||
ORG $1100
|
||||
1100: 00 04 08 0C 10 14 18 1C
|
||||
1108: 00 04 08 0C 10 14 18 1C
|
||||
1110: 01 05 09 0D 11 15 19 1D
|
||||
1118: 01 05 09 0D 11 15 19 1D
|
||||
1120: 02 06 0A 0E 12 16 1A 1E
|
||||
1128: 02 06 0A 0E 12 16 1A 1E
|
||||
1130: 03 07 0B 0F 13 17 1B 1F
|
||||
1138: 03 07 0B 0F 13 17 1B 1F
|
||||
1140: 00 04 08 0C 10 14 18 1C
|
||||
1148: 00 04 08 0C 10 14 18 1C
|
||||
1150: 01 05 09 0D 11 15 19 1D
|
||||
1158: 01 05 09 0D 11 15 19 1D
|
||||
1160: 02 06 0A 0E 12 16 1A 1E
|
||||
1168: 02 06 0A 0E 12 16 1A 1E
|
||||
1170: 03 07 0B 0F 13 17 1B 1F
|
||||
1178: 03 07 0B 0F 13 17 1B 1F
|
||||
1180: 00 04 08 0C 10 14 18 1C
|
||||
1188: 00 04 08 0C 10 14 18 1C
|
||||
1190: 01 05 09 0D 11 15 19 1D
|
||||
1198: 01 05 09 0D 11 15 19 1D
|
||||
11A0: 02 06 0A 0E 12 16 1A 1E
|
||||
11A8: 02 06 0A 0E 12 16 1A 1E
|
||||
11B0: 03 07 0B 0F 13 17 1B 1F
|
||||
11B8: 03 07 0B 0F 13 17 1B 1F
|
||||
```
|
||||
|
||||
## = Address to Y =
|
||||
|
||||
0PPfghcdeabab000 ab
|
||||
PPfghcdeabab0000 << 1
|
||||
11000000 & 0xC0
|
||||
|
||||
0PPfghcdeabab000 cde
|
||||
0PPfghcdeaba >> 4
|
||||
0111000 & 0x38
|
||||
|
||||
0PPfghcdeabab000 fgh
|
||||
0PPfgh >> 10
|
||||
0111 & 7
|
||||
|
||||
C code:
|
||||
|
||||
y = ((address & 0x18) << 3) | ((address & 0x1c00) >> 10) | ((address & 0x380) >> 4);
|
||||
|
||||
int HGR_address_to_y( int address ) {
|
||||
return ((address << 1) & 0xC0) // ab
|
||||
| ((address >> 4) & 0x38) // cde
|
||||
| ((address >> 10) & 0x07);// fgh
|
||||
}
|
||||
|
||||
# TEXT
|
||||
|
||||
## Row to Address
|
||||
|
|
Loading…
Reference in New Issue