I started writting a little scroll with MLC to test the BMOVE routines.
Here it is:
http://gtello.pagesp...r/mlcscroll.zip
Type "OLD DSK1.SCROLL"
and RUN
A wait parameter is asked, 0= fastest, then 3000 or 10000 to slow things a bit.
Here is the source code with PreCompiler (note that in V1.04 there is a little bug when compiling BMOVE... fixed in V1.05)
100 CALL CLEAR::DIM A$(41)
$MLC F 110 10 3000
300 INPUT "WAIT ":W::CALL CLEAR
310 CALL LINK("SCROL1",A$(),W)
320 GOTO 300
$SCROL1
HIGHMEM 0
GETPARAM 2 W ; wait loop
IF=
INC W ; at least W=1 !
ENDIF
DIMTABLE E 256 ; enough for 8 lines
BMOVEVTOC 256 256 E ; load 8 center lines
DIMTABLE F 8 ; to load one char definition
LET S 1032 ; VDP address of char 33
LET B E
INC B ; B = E+1 for one shift
NDO I 96
BMOVEVTOC S 8 F ; take definition
NDO N 8 ; 8 columns
BMOVE B 255 E ; shift one position to the left
LET P 31 ; fist position in table
FOR J 0 7
GETTABLE F(J) A ; one def byte
COMPARE A 128
IF>=
SUB A 128
LET C 138 ; "*"
ELSE
LET C 128 ; " "
ENDIF
ADD A A ; shift A for next bit
PUTTABLE F(J) A ; and stores it
PUTTABLE E(P) C ; correct char in table
ADD P 32 ; next line
NEXT
DEFCHAR 1(N) 42
BMOVECTOV E 256 256 ; copy to screen !!
NDO J W
NLOOP ; wait loop
NLOOP
ADD S 8 ; next definition
NLOOP
$$
$CHAR
0000001818000000 0000183C3C180000 003C7E7E7E7E3C00 7EFFFFFFFFFFFF7E
7EFFFFFFFFFFFF7E 003C7E7E7E7E3C00 0000183C3C180000 0000001818000000
$$
$END
And following, the source in BASIC after PreCompilation:
100 CALL CLEAR::DIM A$(41)
110 CALL INIT::PRINT "LOADING LOADER..."::CALL LOAD("DSK1.LODBIN")::RESTORE 3000
120 PRINT "OPENING BINARY FILE..." :: OPEN #1:"DSK1.MLCBIN",INPUT,INTERNAL,FIXED 128
130 PRINT "READING BLOCS"; :: I=0
140 I=I+1 :: INPUT #1:A$(I) :: PRINT ".";::IF EOF(1)=0 THEN 140
150 CLOSE #1 :: PRINT :: PRINT "COPYING";I;"BLOCS TO MEM..." :: CALL LINK("LODBIN",A$())::PRINT "MY LITTLE COMPILER READY!"
160 READ T$::I=0::IF T$="*" THEN 210
170 I=I+1::READ A$(I)::IF A$(I)<>"*" THEN 170
180 A$(I)=""::IF T$="C" THEN CALL LINK("CHAR",A$())::GOTO 160
190 IF T$="P" THEN CALL LINK("COMPIL",A$()) ELSE CALL LINK("SOUND",A$(),S$())
200 IF SEG$(A$(1),1,2)="OK" THEN 160 ELSE PRINT T$;" ERROR ";A$(1)::END
210 PRINT "COMPILATION OK!"
300 INPUT "WAIT ":W::CALL CLEAR
310 CALL LINK("SCROL1",A$(),W)
320 GOTO 300
3000 DATA P,SCROL1
3010 DATA "@0 G2W _0 !=0 IW L0 TRE256 TV256.256E TRF8 =S1032"
3020 DATA "=BE IB =I96 L0 TVS8F =N8 L1 TMB255E =P31 =J0 L2"
3030 DATA "TGFJA CA128 _3 ?<3 -A128 =C138 _4 B4 L3 =C128 L4"
3040 DATA "+AA TPFJA TPEPC +P32 IJ CJ7 !>2 &D1N42 TCE256.256"
3050 DATA "=JW L2 DJ !=2 DN !=1 +S8 DI !=0"
3060 DATA *
3070 DATA C
3080 DATA "0000001818000000","0000183C3C180000","003C7E7E7E7E3C00","7EFFFFFFFFFFFF7E"
3090 DATA "7EFFFFFFFFFFFF7E","003C7E7E7E7E3C00","0000183C3C180000","0000001818000000"
3100 DATA *
3110 DATA *













