----- Original Message -----
From: Marcel Kilgus <[EMAIL PROTECTED]>
To: ql-users <[EMAIL PROTECTED]>
Sent: Tuesday, July 15, 2003 8:44 PM
Subject: Re: [ql-users] mode 16 to mode 32
>
> Dilwyn Jones wrote:
> > Any suggestions on improving this welcome.
>
> A table (array) would be much faster and probably more accurate.
> The values are these (bytes must be swapped, SMSQ needs $ at
beginning
> instead of h at the end).
>
Here is the Marcel Method version of the program.
First time I noticed that string coercion doesn't extend to the $
operator:
You can't do LET table$(a)='$0000':LET value=table$(a)
So I didn't include the $ symbol in the lookup table in the DATA
statements as Marcel suggested.
I used HEX keyword instead.
Would probably be much faster with the data held in a 256 element
integer array instead so as not to have to do so many HEX('abcd')
conversions. ANyway, heres the listing for you to tinker with.
100 REMark convert mode 16 picture to mode 32
110 REMark modified to use the Marcel Method (look-up table)
120 :
130 CLS : CLS #0
140 DIM table$(255,6)
150 RESTORE
160 FOR a = 0 TO 255 : READ table$(a)
170 :
180 INPUT #0,'Filename of MODE 16 screen > ';ip$
190 INPUT #0,'Filename of MODE 32 conversion > ';op$
200 fl = FLEN(\ip$)
210 IF fl <= 0 THEN STOP
220 base = ALCHP(3*fl) : REMark Mode 32 equivalent is twice as long
230 LBYTES ip$,base
240 :
250 addr32 = base+fl
260 FOR a = base TO base+fl-1
270 byte = PEEK(a) : REMark pixel from mode 16 screen
280 POKE_W addr32,HEX(table$(byte))
290 addr32 = addr32+2
300 END FOR a
310 :
320 SBYTES op$,base+fl,2*fl
330 :
340 RECHP base : REMark release heap area used
350 PRINT #0,'Program finished'
360 STOP
370 :
380 DATA
'0000','0020','2001','2021','0900','0D00','2901','2D01','0048','0068',
'2049','2069','0948','0D68','2949','2D69'
390 DATA
'4002','4022','6003','6023','4902','4D02','6903','6D03','404A','406A',
'604B','606B','494A','4D6A','694B','6D6B'
400 DATA
'1200','1600','3201','3601','1B00','1F00','3B01','3F01','1248','1668',
'3249','3669','1B48','1F68','3B49','3F69'
410 DATA
'5202','5602','7203','7603','5B02','5F02','7B03','7F03','524A','566A',
'724B','766B','5B4A','5F6A','7B4B','7F6B'
420 DATA
'0090','00B0','2091','20B1','0990','0DB0','2991','2DB1','00D8','00F8',
'20D9','20F9','09D8','0DF8','29D9','2DF9'
430 DATA
'4092','40B2','6093','60B3','4992','4DB2','6993','6DB3','40DA','40FA',
'60DB','60FB','49DA','4DFA','69DB','6DFB'
440 DATA
'1290','16B0','3291','36B1','1B90','1FB0','3B91','3FB1','12D8','16F8',
'32D9','36F9','1BD8','1FF8','3BD9','3FF9'
450 DATA
'5292','56B2','7293','76B3','5B92','5FB2','7B93','7FB3','52DA','56FA',
'72DB','76FB','5BDA','5FFA','7BDB','7FFB'
460 DATA
'8004','8024','A005','A025','8904','8D04','A905','AD05','804C','806C',
'A04D','A06D','894C','8D6C','A94D','AD6D'
470 DATA
'C006','C026','E007','E027','C906','CD06','E907','ED07','C04E','C06E',
'E04F','E06F','C94E','CD6E','E94F','ED6F'
480 DATA
'9204','9604','B205','B605','9B04','9F04','BB05','BF05','924C','966C',
'B24D','B66D','9B4C','9F6C','BB4D','BF6D'
490 DATA
'D206','D606','F207','F607','DB06','DF06','FB07','FF07','D24E','D66E',
'F24F','F66F','DB4E','DF6E','FB4F','FF6F'
500 DATA
'8094','80B4','A095','A0B5','8994','8DB4','A995','ADB5','80DC','80FC',
'A0DD','A0FD','89DC','8DFC','A9DD','ADFD'
510 DATA
'C096','C0B6','E097','E0B7','C996','CDB6','E997','EDB7','C0DE','C0FE',
'E0DF','E0FF','C9DE','CDFE','E9DF','EDFF'
520 DATA
'9294','96B4','B295','B6B5','9B94','9FB4','BB95','BFB5','92DC','96FC',
'B2DD','B6FD','9BDC','9FFC','BBDD','BFFD'
530 DATA
'D296','D6B6','F297','F6B7','DB96','DFB6','FB97','FFB7','D2DE','D6FE',
'F2DF','F6FF','DBDE','DFFE','FBDF','FFFF'