View Single Post
  #2  
Old 07-09-2007, 06:24 AM
Grant Stockly Grant Stockly is offline
Administrator
 
Join Date: Jan 2005
Posts: 447
Default

I think that I should have added 1 to the test. Because I am increasing the pointer AFTER the copy, I need to be 1 ahead... Unless I put the compare routine BEFORE the copy+increment.

Here is the new version of the code which includes the program/music data. No need for an octal to hex conversion, the assembler can handle it.

Anyone see any problems before I burn it? By examining FC10 on the Altair and pressing the "RUN" switch the Altair will begin playing music! Much better than sitting in front of the thing for 45 minutes every time. And all of this in the unused part of the VTL ROM.

Code:
000001 0000                  ;Loader to move 215 bytes from ROM to RAM
000002 0000                  ;
000003 FC28                  .EQU SOURCE,H'FC28 ;ADDRESS OF START
000004 0000                  .EQU DESTINATION,H'0000  ;DESTINATION ADDRESS
000005 00D7                  .EQU LENGTH,215    ;LENGTH OF COPY
000006 0000                  ;
000007 FC10                  .org H'FC10    ;FC10 IS PROGRAM STARTING POINT IN MEMORY
000008 FC10                  ;
000009 FC10 0128FC           INIT:    LXI B, SOURCE ;STARTING ADDRESS IN ROM FOR SOURCE
000010 FC13 110000                    LXI D, DESTINATION  ;STARTING ADDRESS IN RAM FOR DESTINATION
000011 FC16 0A               LOADLP:  LDAX  B   ;LOAD BYTE FROM ROM
000012 FC17 12                        STAX  D   ;STORE BYTE IN RAM
000013 FC18 03                        INX B   ;INCREASE ROM ADDRESS POINTER BY ONE
000014 FC19 13                        INX D   ;INCREASE RAM ADDRESS POINTER BY ONE
000015 FC1A                  
000016 FC1A 7B                        MOV A,E   ;COMPARE LOW MEMORY POINTER TO GOAL
000017 FC1B FED8                      CPI ((DESTINATION+LENGTH+1)&H'00FF)
000018 FC1D C216FC                    JNZ LOADLP    ;NOT EQUAL, CONTINUE
000019 FC20                  ;        MOV A,D   ;COMPARE HIGH MEMORY POINTER TO GOAL
000020 FC20                  ;        CPI ((DESTINATION+LENGTH+1)&H'FF00)>>8
000021 FC20                  ;        JNZ LOADLP    ;NOT EQUAL, CONTINUE
000022 FC20                  ;
000023 FC20 C30000                    JMP H'0000    ;MEMORY COPIED, JMP to 0000
000024 FC23                  ;
000025 FC23                  ;*****MUSIC PROGRAM/DATA START*****
000026 FC23                  ;
000027 FC23                  ;FILLER (FOR EPROM READABILITY)
000028 FC23 0000000000       .db Q'000, Q'000, Q'000, Q'000, Q'000
000029 FC28                  ;
000030 FC28                  ;PROGRAM (START=000 WHEN COPIED) TEMPO=040, MUSIC START=000040
000031 FC28 2120007EFEFFCA00 .db Q'041, Q'040, Q'000, Q'176, Q'376, Q'377, Q'312, Q'000, Q'000
       FC30 00              
000032 FC31 162005C2100046   .db Q'026, Q'040, Q'005, Q'302, Q'020, Q'000, Q'106
000033 FC38 0DC20B0015C20B00 .db Q'015, Q'302, Q'013, Q'000, Q'025, Q'302, Q'013, Q'000
000034 FC40 2CC30300         .db Q'054, Q'303, Q'003, Q'000
000035 FC44                  ;
000036 FC44                  ;FILLER (START=034 WHEN COPIED)
000037 FC44 00000000         .db Q'000, Q'000, Q'000, Q'000
000038 FC48                  ;
000039 FC48                  ;MUSIC DATA (START=040 WHEN COPIED)
000040 FC48 4545554039333333 .db Q'105, Q'105, Q'125, Q'100, Q'071, Q'063, Q'063, Q'063
000041 FC50 39332D2B2B2D3933 .db Q'071, Q'063, Q'055, Q'053, Q'053, Q'055, Q'071, Q'063
000042 FC58 262626393326262B .db Q'046, Q'046, Q'046, Q'071, Q'063, Q'046, Q'046, Q'053
000043 FC60 2226263339332B2B .db Q'042, Q'046, Q'046, Q'063, Q'071, Q'063, Q'053, Q'053
000044 FC68 332B393333393326 .db Q'063, Q'053, Q'071, Q'063, Q'063, Q'071, Q'063, Q'046
000045 FC70 26262B222B26262B .db Q'046, Q'046, Q'053, Q'042, Q'053, Q'046, Q'046, Q'053
000046 FC78 2D2B393640393940 .db Q'055, Q'053, Q'071, Q'066, Q'100, Q'071, Q'071, Q'100
000047 FC80 3936363940404039 .db Q'071, Q'066, Q'066, Q'071, Q'100, Q'100, Q'100, Q'071
000048 FC88 3630303639363630 .db Q'066, Q'060, Q'060, Q'066, Q'071, Q'066, Q'066, Q'060
000049 FC90 2B2626262624262B .db Q'053, Q'046, Q'046, Q'046, Q'046, Q'044, Q'046, Q'053
000050 FC98 2B2B2B2B020202FF .db Q'053, Q'053, Q'053, Q'053, Q'002, Q'002, Q'002, Q'377
000051 FCA0 1C1C1C2222222B2B .db Q'034, Q'034, Q'034, Q'042, Q'042, Q'042, Q'053, Q'053
000052 FCA8 2B393939332D2B33 .db Q'053, Q'071, Q'071, Q'071, Q'063, Q'055, Q'053, Q'063
000053 FCB0 332B393939393939 .db Q'063, Q'053, Q'071, Q'071, Q'071, Q'071, Q'071, Q'071
000054 FCB8 2626261C1C1C2222 .db Q'046, Q'046, Q'046, Q'034, Q'034, Q'034, Q'042, Q'042
000055 FCC0 222B2B2B332D2B26 .db Q'042, Q'053, Q'053, Q'053, Q'063, Q'055, Q'053, Q'046
000056 FCC8 2622262626262622 .db Q'046, Q'042, Q'046, Q'046, Q'046, Q'046, Q'046, Q'042
000057 FCD0 2022261C1C22262B .db Q'040, Q'042, Q'046, Q'034, Q'034, Q'042, Q'046, Q'053
000058 FCD8 2B2B2B2622222B33 .db Q'053, Q'053, Q'053, Q'046, Q'042, Q'042, Q'053, Q'063
000059 FCE0 332B333939393939 .db Q'063, Q'053, Q'063, Q'071, Q'071, Q'071, Q'071, Q'071
000060 FCE8 2B2B222626392B2B .db Q'053, Q'053, Q'042, Q'046, Q'046, Q'071, Q'053, Q'053
000061 FCF0 222622201C222B26 .db Q'042, Q'046, Q'042, Q'040, Q'034, Q'042, Q'053, Q'046
000062 FCF8 26392B2B2B2B02FF .db Q'046, Q'071, Q'053, Q'053, Q'053, Q'053, Q'002, Q'377
000063 FD00                  ;IF THIS LINE ISN'T FD00, WE HAVE A PROBLEM
DESTINAT=0000  
INIT    =FC10  
LENGTH  =00D7  
LOADLP  =FC16  
SOURCE  =FC28
Reply With Quote