-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlmmm.asc
More file actions
81 lines (81 loc) · 3 KB
/
lmmm.asc
File metadata and controls
81 lines (81 loc) · 3 KB
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
1000 'Rerun code fast if needed by setting KEY1 to 'RUN"LMMM.ASC"<enter>'
1001 KEY1,"RUN"+CHR$(34)+"LMMM.ASC"+CHR$(34)+CHR$(13)
1002 'Return most significant byte of integer as an unsigned
1003 DEFFNMB(X%)=VAL("&H"+LEFT$(RIGHT$("000"+HEX$(X%),4),2))
1010 'Start
1011 SCREEN2:SETPAGE0,0:COLOR15,0,1:COLOR=(1,0,0,0):COLOR=(2,7,0,0):COLOR=(3,0,7,0)
1012 'Write messages
1013 OPEN"GRP:"FOROUTPUTAS#1
1014 PSET(16,0):PRINT#1,":redefined 2 chars (layer A)"
1015 PSET(16,8):PRINT#1,":copy each individual block"
1016 PSET(16,24):PRINT#1,":copy of 2x2 block"
1017 PSET(0,176):PRINT#1,"ESC to END or any key to reload."
1020 'Pick first tile at hidden location (0,27)
1021 B%=((0)*4)+((27)*1024):FORJ%=0TO7:READA$:FORI%=0TO3:A%=(ASC(MID$(A$,I%*2+1,1))-33)*16+ASC(MID$(A$,I%*2+2,1))-33:VPOKEB%+J%*4*32+I%,A%:NEXTI%,J%
1023 'Pick a second tile at (1,27)
1024 B%=((1)*4)+((27)*1024):FORJ%=0TO7:READA$:FORI%=0TO3:A%=(ASC(MID$(A$,I%*2+1,1))-33)*16+ASC(MID$(A$,I%*2+2,1))-33:VPOKEB%+J%*4*32+I%,A%:NEXTI%,J%
1030 'call LMMM
1031 ' (0,27) -> (0,0), (1x1 block)
1032 SX%=(0)*4+512:SY%=(27)+1920:DX%=(0)*4+512:DY%=(0)+1920:NX%=(1)*4:NY%=1:DI%=&B00000000:LO%=&B00001100:GOSUB2000
1033 ' (1,27) -> (1,0), (1x1 block)
1034 SX%=(1)*4+512:SY%=(27)+1920:DX%=(1)*4+512:DY%=(0)+1920:NX%=(1)*4:NY%=1:DI%=&B00000000:LO%=&B00001100:GOSUB2000
1035 ' (1,0) -> (0,1), (1x1 block)
1036 SX%=(1)*4+512:SY%=(0)+1920:DX%=(0)*4+512:DY%=(1)+1920:NX%=(1)*4:NY%=1:DI%=&B00000000:LO%=&B00001100:GOSUB2000
1037 ' (0,0) -> (1,1), (1x1 block)
1038 SX%=(0)*4+512:SY%=(0)+1920:DX%=(1)*4+512:DY%=(1)+1920:NX%=(1)*4:NY%=1:DI%=&B00000000:LO%=&B00001100:GOSUB2000
1039 ' (0,0)-(1,1) -> (0,3), (2x2 block)
1040 SX%=(0)*4+512:SY%=(0)+1920:DX%=(0)*4+512:DY%=(3)+1920:NX%=(2)*4:NY%=2:DI%=&B00000000:LO%=&B00001100:GOSUB2000
1500 X=0:ONINTERVAL=1GOSUB1510:INTERVALON
1501 A$=INKEY$:IFA$=""THEN1501ELSEIFA$=CHR$(27)THENENDELSERUN"LMMM.ASC"
1502 GOTO1501
1510 'INTERVAL
1520 SETSCROLLX,0:IFX>511THENX=0ELSEX=X+1
1530 RETURN
2000 'LMMM (SX,SY to DX,DY)
2001 'SX: source X
2002 VDP(32)=SX%AND255
2003 VDP(33)=FNMB(SX%)
2004 'SY: source Y
2005 VDP(34)=SY%AND255
2006 VDP(35)=FNMB(SY%)
2007 'DX: destination X
2008 VDP(36)=DX%AND255
2009 VDP(37)=FNMB(DX%)
2010 'DY: destination Y
2011 VDP(38)=DY%AND255
2012 VDP(39)=FNMB(DY%)
2013 'NX: width
2014 VDP(40)=NX%AND255
2015 VDP(41)=FNMB(NX%)
2016 'NY: height
2015 VDP(42)=NY%AND255
2016 VDP(43)=FNMB(NY%)
2017 'DI: DIY,DIX
2016 VDP(44)=DI%AND255
2017 'logic operation (LO)
2020 VDP(45)=LO%
2021 'WRITE MASK (fixed)
2022 'VDP(46)=255
2023 VDP(47)=255
2024 'OP=LMMM(0100)
2025 VDP(52)=&b0100*16
2026 RETURN
3000 VDP(36)=0:VDP(37)=0:VDP(38)=0:VDP(39)=0:RETURN
10000 ' tile 0
10001 DATA ########
10002 DATA #$$$$$$#
10003 DATA #$####$#
10004 DATA #$#$$#$#
10005 DATA #$#$$#$#
10006 DATA #$####$#
10007 DATA #$$$$$$#
10008 DATA ########
10010 ' tile 1
10011 DATA ########
10012 DATA #$$$$$$#
10013 DATA #$####$#
10014 DATA #$$##$$#
10015 DATA #$$##$$#
10016 DATA #$####$#
10017 DATA #$$$$$$#
10018 DATA ########