SERVICE CALL &2B - READ MEMORY SIZE =================================== On entry: A=&2B, X=this rom number, Y=calling rom number This call is issued during startup to display an alternative startup banner displaying the amount of additional memory. The service call handler should add up shadow RAM and all available banks of sideways RAM and display an appropriate banner, eg "Acorn OS 80K". If the startup banner is already suppressed, or the Tube is enabled, no alternative banner should be displayed. DFS 2.26/SRAM 1.05 contains the following code. SERVICE CALLS ============= BF01 C9 01 É. CMP #&01 Absolute workspace claim at RESET? BF03 D0 16 Ð. BNE &BF1B No, jump ahead BF05 48 H PHA Save all registers BF06 8A . TXA BF07 48 H PHA BF08 98 . TYA BF09 48 H PHA BF0A A9 8F ©. LDA #&8F BF0C A2 2B ¢+ LDX #&2B BF0E A4 F4 ¤ô LDY &F4 BF10 20 F4 FF ô. JSR &FFF4 Do service call &2B, BF13 68 h PLA Restore all registers BF14 A8 ¨ TAY BF15 68 h PLA BF16 AA ª TAX BF17 68 h PLA BF18 4C 9E B1 L.± JMP &B19E Jump to deal DFS service handler BF1B C9 2B É+ CMP #&2B Service call &2B? BF1D D0 F9 Ðù BNE &BF18 No, jump back to DFS handler BF1F C4 F4 Äô CPY &F4 Was it called with this ROM number? BF21 F0 06 ð. BEQ &BF29 Jump to handle it BF23 A6 F4 ¦ô LDX &F4 If not passed this ROM number, BF25 A9 00 ©. LDA #&00 claim the call BF27 F0 EF ðï BEQ &BF18 and jump to exit BF29 A9 72 ©r LDA #&72 Do OSBYTE &72,0,255 to read BF2B 20 C8 BF È¿ JSR &BFC8 shadow RAM use, then call again BF2E 20 F4 FF ô. JSR &FFF4 to write setting back BF31 70 F0 pð BVS &BF23 No shadow memory, jump to exit BF33 A9 EA ©ê LDA #&EA BF35 20 C8 BF È¿ JSR &BFC8 Read Tube flag BF38 E0 00 à. CPX #&00 Is Tube absent? BF3A D0 E7 Ðç BNE &BF23 Tube present, jump to exit BF3C A9 D7 ©× LDA #&D7 BF3E 20 C8 BF È¿ JSR &BFC8 Read startup message flags BF41 E0 00 à. CPX #&00 If startup message already BF43 10 DE .Þ BPL &BF23 suppessed, jump to exit BF45 A9 D7 ©× LDA #&D7 BF47 A0 7F  . LDY #&7F BF49 20 CA BF Ê¿ JSR &BFCA Suppress startup message BF4C 20 E7 FF ç. JSR &FFE7 Print NL BF4F A2 00 ¢. LDX #&00 BF51 20 C0 BF À¿ JSR &BFC0 Print "Acorn OS " BF54 A9 FD ©ý LDA #&FD BF56 20 C8 BF È¿ JSR &BFC8 Read last BREAK type BF59 E0 00 à. CPX #&00 BF5B F0 2D ð- BEQ &BF8A Soft BREAK, jump to finish BF5D BA º TSX Save stack pointer in X BF5E A0 30  0 LDY #&30 BF60 B9 CF BF ¹Ï¿ LDA &BFCF,Y Copy ROM access routine to stack BF63 48 H PHA BF64 88 . DEY BF65 D0 F9 Ðù BNE &BF60 BF67 8A . TXA BF68 A8 ¨ TAY Pass old stack pointer to Y BF69 A9 01 ©. LDA #&01 Push &01 - high byte of routine BF6B 48 H PHA on the stack BF6C BA º TSX Calculate low byte of routine BF6D E8 è INX on stack to 'RTS' to. Pushes BF6E 8A . TXA -1 BF6F 48 H PHA BF70 A2 0F ¢. LDX #&0F Start at ROM 15 BF72 A9 00 ©. LDA #&00 BF74 85 B0 .° STA &B0 Set number of banks to zero BF76 60 ` RTS Jump to routine Interrgate ROMs --------------- This code will be on the stack when called BFD0 A5 F4 ¥ô LDA &F4 BFD2 48 H PHA Save current ROM number BFD3 86 F4 .ô STX &F4 BFD5 8E 30 FE .0þ STX &FE30 Select a ROM BFD8 AD FF BF ­.¿ LDA &BFFF Manipulate &BFFF to see if it BFDB 48 H PHA is RAM BFDC 49 A5 I¥ EOR #&A5 Flip some bits BFDE 8D FF BF ..¿ STA &BFFF Try to store new byte BFE1 CD FF BF Í.¿ CMP &BFFF Does it match? BFE4 D0 02 Ð. BNE &BFE8 No, jump past BFE6 E6 B0 æ° INC &B0 Increment number of banks present BFE8 68 h PLA BFE9 8D FF BF ..¿ STA &BFFF Restore RAM contents BFEC CA Ê DEX Decrement ROM number BFED 30 08 0. BMI &BFF7 All done, jump to return BFEF E0 0B à. CPX #&0B Loop for ROMs 15-12 BFF1 D0 E0 Ðà BNE &BFD3 Skip ROMs 11-2 BFF3 A2 01 ¢. LDX #&01 Start again at ROM 1 BFF5 D0 DC ÐÜ BNE &BFD3 Loop for ROM 1 and 0 BFF7 68 h PLA Get previous ROM number BFF8 85 F4 .ô STA &F4 BFFA 8D 30 FE .0þ STA &FE30 Restore ROM BFFD 4C 77 BF Lw¿ JMP &BF77 Jump back to main code BF77 98 . TYA Pass saved stack pointer from BF78 AA ª TAX Y back to X and then to S to BF79 9A . TXS restore stack BF7A A5 B0 ¥° LDA &B0 Get number of RAM banks BF7C 0A . ASL A BF7D 0A . ASL A Muliply by four BF7E 18 . CLC BF7F 69 0D i. ADC #&0D Add base of memory size strings BF81 AA ª TAX BF82 20 C0 BF À¿ JSR &BFC0 Print appropriate memory size BF85 A2 0A ¢. LDX #&0A BF87 20 C0 BF À¿ JSR &BFC0 Print "K" BF8A 20 E7 FF ç. JSR &FFE7 Print two NLs BF8D 20 E7 FF ç. JSR &FFE7 BF90 4C 23 BF L#¿ JMP &BF23 Jump to claim call BF93 41 63 Ac EOR (&63,X) "Acorn OS " BF95 6F 72 6E orn BBR6,&72,&C005 BF98 20 4F 53 OS JSR &534F BF9B 20 00 4B .K JSR &4B00 "K" BF9E 07 . EQUB &07 BF9F 00 . BRK BFA0 36 34 64 ROL &34,X "64K" BFA2 00 . BRK BFA3 00 . BRK BFA4 38 8 SEC BFA5 30 00 0. BMI &BFA7 "80K" BFA7 00 . BRK BFA8 39 36 00 96. AND &0036,Y "96K" BFAB 00 . BRK BFAC 31 31 11 AND (&31),Y "112K" BFAE 32 00 2. AND (&00) BFB0 31 32 12 AND (&32),Y "128K" BFB2 38 8 SEC BFB3 00 . BRK BFB4 31 34 14 AND (&34),Y "144K" BFB6 34 00 4. BIT &00,X BFB8 31 36 16 AND (&36),Y "160K" BFBA 30 00 0. BMI &BFBC Print a string from startup message table ----------------------------------------- BFBC 20 EE FF î. JSR &FFEE BFBF E8 è INX BFC0 BD 93 BF ½.¿ LDA &BF93,X BFC3 C9 00 É. CMP #&00 BFC5 D0 F5 Ðõ BNE &BFBC BFC7 60 ` RTS Read an OSBYTE value -------------------- BFC8 A0 FF  . LDY #&FF BFCA A2 00 ¢. LDX #&00 BFCC 20 F4 FF ô. JSR &FFF4 BFCF 60 ` RTS