Elite on the BBC Micro

# Inventory: TT210 (Disc version)

```       Name: TT210                                             [View in context]
Type: Subroutine                                       [Compare versions]
Category: Inventory
Summary: Show a list of current cargo in our hold, optionally to sell

Show a list of current cargo in our hold, either with the ability to sell (the
Sell Cargo screen) or without (the Inventory screen), depending on the current
view.

Arguments:

QQ11                 The current view:

* 4 = Sell Cargo

* 8 = Inventory

Other entry points:

NWDAVxx              Used to rejoin this routine from the call to NWDAV4

.TT210

LDY #0                 \ We're going to loop through all the available market
\ items and check whether we have any in the hold (and,
\ if we are in the Sell Cargo screen, whether we want
\ to sell any items), so we set up a counter in Y to
\ denote the current item and start it at 0

.TT211

STY QQ29               \ Store the current item number in QQ29

.NWDAVxx

LDX QQ20,Y             \ Fetch into X the amount of the current item that we
BEQ TT212              \ have in our cargo hold, which is stored in QQ20+Y,
\ and if there are no items of this type in the hold,

TYA                    \ Set Y = Y * 4, so this will act as an index into the
ASL A                  \ market prices table at QQ23 for this item (as there
ASL A                  \ are four bytes per item in the table)
TAY

LDA QQ23+1,Y           \ Fetch byte #1 from the market prices table for the
STA QQ19+1             \ current item and store it in QQ19+1, for use by the
\ call to TT152 below

TXA                    \ Store the amount of item in the hold (in X) on the
PHA                    \ stack

JSR TT69               \ Call TT69 to set Sentence Case and print a newline

CLC                    \ Print recursive token 48 + QQ29, which will be in the
LDA QQ29               \ range 48 ("FOOD") to 64 ("ALIEN ITEMS"), so this
ADC #208               \ prints the current item's name
JSR TT27

LDA #14                \ Move the text cursor to column 14, for the item's
STA XC                 \ quantity

PLA                    \ Restore the amount of item in the hold into X
TAX

STA QQ25               \ Store the amount of this item in the hold in QQ25

CLC                    \ Print the 8-bit number in X to 3 digits, without a
JSR pr2                \ decimal point

JSR TT152              \ Print the unit ("t", "kg" or "g") for the market item
\ whose byte #1 from the market prices table is in
\ QQ19+1 (which we set up above)

LDA QQ11               \ If the current view type in QQ11 is not 4 (Sell Cargo
CMP #4                 \ screen), jump to TT212 to skip the option to sell
BNE TT212              \ items

\JSRTT162               \ This instruction is commented out in the original
\ source

LDA #205               \ Print recursive token 45 ("SELL")
JSR TT27

LDA #206               \ Print extended token 206 ("{all caps}(Y/N)?")
JSR DETOK

JSR gnum               \ Call gnum to get a number from the keyboard, which
\ will be the number of the item we want to sell,
\ returning the number entered in A and R, and setting
\ the C flag if the number is bigger than the available
\ amount of this item in QQ25

BEQ TT212              \ If no number was entered, jump to TT212 to move on to
\ the next item

BCS NWDAV4             \ If the number entered was too big, jump to NWDAV4 to
\ print an "ITEM?" error, make a beep and rejoin the
\ routine at NWDAVxx above

LDA QQ29               \ We are selling this item, so fetch the item number
\ from QQ29

LDX #255               \ Set QQ17 = 255 to disable printing
STX QQ17

JSR TT151              \ Call TT151 to set QQ24 to the item's price / 4 (the
\ routine doesn't print the item details, as we just
\ disabled printing)

LDY QQ29               \ Subtract R (the number of items we just asked to buy)
LDA QQ20,Y             \ from the available amount of this item in QQ20, as we
SEC                    \ just bought them
SBC R
STA QQ20,Y

LDA R                  \ Set P to the amount of this item we just bought
STA P

LDA QQ24               \ Set Q to the item's price / 4
STA Q

JSR GCASH              \ Call GCASH to calculate
\
\   (Y X) = P * Q * 4
\
\ which will be the total price we make from this sale
\ (as P contains the quantity we're selling and Q
\ contains the item's price / 4)

JSR MCASH              \ Add (Y X) cash to the cash pot in CASH

LDA #0                 \ We've made the sale, so set the amount

STA QQ17               \ Set QQ17 = 0, which enables printing again

.TT212

LDY QQ29               \ Fetch the item number from QQ29 into Y, and increment
INY                    \ Y to point to the next item

CPY #17                \ Loop back to TT211 to print the next item in the hold
BCC TT211              \ until Y = 17 (at which point we have done the last
\ item)

LDA QQ11               \ If the current view type in QQ11 is not 4 (Sell Cargo
CMP #4                 \ screen), skip the next two instructions and just
BNE P%+8               \ return from the subroutine

JSR dn2                \ This is the Sell Cargo screen, so call dn2 to make a
\ short, high beep and delay for 1 second

JMP BAY2               \ And then jump to BAY2 to display the Inventory
\ screen, as we have finished selling cargo

RTS                    \ Return from the subroutine
```